Changes between Version 3 and Version 4 of Ticket #15574, comment 14


Ignore:
Timestamp:
2017-12-05T15:46:35+01:00 (6 years ago)
Author:
cmuelle8

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #15574, comment 14

    v3 v4  
    66
    77EDIT3: add repaint call if reading width and height timed out and run() method returns early
    8 {{{
    9   #!patch
    10 Index: src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
    11 ===================================================================
    12 --- src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java     (revision 13193)
    13 +++ src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java     (working copy)
    14 @@ -90,8 +90,12 @@
    15      private static double bilinUpper;
    16      private static double bilinLower;
    17  
    18 -    @Override
    19 -    public void preferenceChanged(PreferenceChangeEvent e) {
    20 +    /**
    21 +     * Avoid find-bugs bad style warnings by write accessing static members from
    22 +     * a static method only.
    23 +     * @param e {@code PreferenceChangeEvent}
    24 +     */
    25 +    public static synchronized void preferenceChangedImpl(PreferenceChangeEvent e) {
    26          if (e == null ||
    27              e.getKey().equals(AGPIFO_STYLE.getKey())) {
    28              dragButton = AGPIFO_STYLE.get() ? 1 : 3;
    29 @@ -106,6 +110,11 @@
    30          }
    31      }
    32  
    33 +    @Override
    34 +    public void preferenceChanged(PreferenceChangeEvent e) {
    35 +        preferenceChangedImpl(e);
    36 +    }
    37 +
    38      /**
    39       * Manage the visible rectangle of an image with full bounds stored in init.
    40       * @since 13127
    41 @@ -216,8 +225,8 @@
    42  
    43          private final File file;
    44          private final int orientation;
    45 -        private int width;
    46 -        private int height;
    47 +        private int width = 0;
    48 +        private int height = 0;
    49  
    50          LoadImageRunnable(File file, Integer orientation) {
    51              this.file = file;
    52 @@ -231,7 +240,7 @@
    53                  this.width = width;
    54                  this.height = height;
    55                  synchronized (this) {
    56 -                    this.notify();
    57 +                    this.notifyAll();
    58                      return false;
    59                  }
    60              }
    61 @@ -243,19 +252,27 @@
    62              Image img = Toolkit.getDefaultToolkit().createImage(file.getPath());
    63  
    64              synchronized (this) {
    65 -                width = -1;
    66                  img.getWidth(this);
    67                  img.getHeight(this);
    68  
    69 -                while (width < 0) {
    70 +                long now = System.currentTimeMillis();
    71 +                while (!(width > 0 && height > 0)) {
    72                      try {
    73 -                        this.wait();
    74 -                        if (width < 0) {
    75 -                            errorLoading = true;
    76 +                        this.wait(1000);
    77 +                        if (this.file != ImageDisplay.this.file)
    78                              return;
    79 -                        }
    80 +                        if (System.currentTimeMillis() - now > 10000)
    81 +                            // no image dimensions could be read within timeout
    82 +                            synchronized (ImageDisplay.this) {
    83 +                                errorLoading = true;
    84 +                                ImageDisplay.this.repaint();
    85 +                                return;
    86 +                            }
    87                      } catch (InterruptedException e) {
    88 -                        e.printStackTrace();
    89 +                        Logging.trace(e);
    90 +                        Logging.warn("InterruptedException in {0} while getting properties of image {1}",
    91 +                                getClass().getSimpleName(), file.getPath());
    92 +                        Thread.currentThread().interrupt();
    93                      }
    94                  }
    95              }
    96 @@ -279,24 +296,19 @@
    97                          Thread.sleep(5);
    98                      } catch (InterruptedException e) {
    99                          Logging.trace(e);
    100 -                        Logging.warn("InterruptedException in "+getClass().getSimpleName()+
    101 -                                " while loading image "+file.getPath());
    102 +                        Logging.warn("InterruptedException in {0} while loading image {1}",
    103 +                                getClass().getSimpleName(), file.getPath());
    104                          Thread.currentThread().interrupt();
    105                      }
    106                  }
    107                  if (tracker.isErrorID(1)) {
    108 +                    // the tracker catches OutOfMemory conditions
    109                      img = null;
    110 -                    System.gc();
    111                  }
    112              } else {
    113                  img = null;
    114              }
    115  
    116 -            if (img == null || width <= 0 || height <= 0) {
    117 -                tracker.removeImage(img);
    118 -                img = null;
    119 -            }
    120 -
    121              synchronized (ImageDisplay.this) {
    122                  if (this.file != ImageDisplay.this.file) {
    123                      // The file has changed
    124 @@ -566,10 +578,12 @@
    125          public void mouseReleased(MouseEvent e) {
    126              File file;
    127              Image image;
    128 +            VisRect visibleRect;
    129  
    130              synchronized (ImageDisplay.this) {
    131                  file = ImageDisplay.this.file;
    132                  image = ImageDisplay.this.image;
    133 +                visibleRect = ImageDisplay.this.visibleRect;
    134              }
    135  
    136              if (image == null)
    137 }}}
     8
     9EDIT4: superceded by attachment:josm-store-width-and-height-info-in-ImageEntry.patch