diff options
author | Keith Packard <keithp@keithp.com> | 2013-04-16 17:33:42 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2013-04-17 10:39:54 -0700 |
commit | a03aaaca60ccb4b44595e5e1c1047d07d8b6d60f (patch) | |
tree | b77f40c97e26883f8298900ad05fae9d223f1bc4 | |
parent | 5b041769dc926f0aa18072f46abca60b11ede44b (diff) |
altosui: Handle broken network in map tile loading
Handle missing pngfiles in AltosSetMapCache by checking ImageIO.read
for null return.
Do incremental map tile downloading asynchronously so that the UI
doesn't lock up when the network is slow
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | altosui/AltosSiteMap.java | 16 | ||||
-rw-r--r-- | altosui/AltosSiteMapCache.java | 10 |
2 files changed, 21 insertions, 5 deletions
diff --git a/altosui/AltosSiteMap.java b/altosui/AltosSiteMap.java index 5bf02e54..23085f3e 100644 --- a/altosui/AltosSiteMap.java +++ b/altosui/AltosSiteMap.java @@ -220,6 +220,16 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { return pngfile.toString(); } + public void initAndFinishMapAsync (final AltosSiteMapTile tile, final Point offset) { + Thread thread = new Thread() { + public void run() { + initMap(offset); + finishTileLater(tile, offset); + } + }; + thread.start(); + } + public void setBaseLocation(double lat, double lng) { for (Point k : mapTiles.keySet()) { AltosSiteMapTile tile = mapTiles.get(k); @@ -308,8 +318,7 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { AltosSiteMapTile tile = createTile(offset); tile.show(state, listener_state, lref, ref); - initMap(offset); - finishTileLater(tile, offset); + initAndFinishMapAsync(tile, offset); } scrollRocketToVisible(pt); @@ -370,8 +379,7 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { if (mapTiles.containsKey(offset)) continue; AltosSiteMapTile tile = createTile(offset); - initMap(offset); - finishTileLater(tile, offset); + initAndFinishMapAsync(tile, offset); } } } diff --git a/altosui/AltosSiteMapCache.java b/altosui/AltosSiteMapCache.java index 617ed4a9..40c8ff6b 100644 --- a/altosui/AltosSiteMapCache.java +++ b/altosui/AltosSiteMapCache.java @@ -19,6 +19,7 @@ package altosui; import javax.swing.*; import javax.imageio.ImageIO; +import java.awt.image.*; import java.io.*; import java.net.URL; import java.net.URLConnection; @@ -87,7 +88,14 @@ public class AltosSiteMapCache extends JLabel { } try { - return new ImageIcon(ImageIO.read(pngfile)); + BufferedImage img; + + img = ImageIO.read(pngfile); + if (img == null) { + System.out.printf("# Can't read pngfile %s\n", pngfile); + return null; + } + return new ImageIcon(img); } catch (IOException e) { System.out.printf("# IO error trying to load %s\n", pngfile); return null; |