/** * Image Loader for the Moving Map Navigator Demonstrator Applet * @author Robert J Morton * @version 12 Dec 2007 * Extended for sandboxed jar-file operation Wed 01 Feb 2017 12:34:27 BRST */ import java.awt.Component; // Java Abstract Windowing Toolkit import java.awt.MediaTracker; // for the new-fangled 1.1 event handling public class imgldr { private movmap mm; // instance reference to the movmap applet private msgpanel mp; // instance reference for message panel private MediaTracker tracker; // to track when the images have been loaded private boolean // TRUE indicates: loadingImages = true, // images are being loaded trackerError = false, // tracker encountered an error loadFTT = true, // erase and repaint of the loading message errorFTT = true; // show load-error message imgldr(movmap mm, msgpanel mp) { this.mm = mm; // instance reference to the movmap applet this.mp = mp; // instance of message panel // create a media tracker and register images with it tracker = new MediaTracker(mm); if(mm.JarredImages) { // load images from the applet's own jar file movmap.IMG1 = mm.getImage(getClass().getResource("clouds1.png")); movmap.IMG2 = mm.getImage(getClass().getResource("clouds2.png")); movmap.IMG3 = mm.getImage(getClass().getResource("clouds3.png")); movmap.IMG4 = mm.getImage(getClass().getResource("clouds4.png")); } else { // load images directly from the remote server movmap.IMG1 = mm.getImage(mm.getDocumentBase(), "clouds1.png"); movmap.IMG2 = mm.getImage(mm.getDocumentBase(), "clouds2.png"); movmap.IMG3 = mm.getImage(mm.getDocumentBase(), "clouds3.png"); movmap.IMG4 = mm.getImage(mm.getDocumentBase(), "clouds4.png"); } /* Start a media tracker to monitor progress of the loading process for of each of the four image files. */ tracker.addImage(movmap.IMG1,0); tracker.addImage(movmap.IMG2,0); tracker.addImage(movmap.IMG3,0); tracker.addImage(movmap.IMG4,0); } boolean awaitingImages() { if(loadFTT) { // if this is the first time through here mp.showMsg("Loading images from server...", true, true); loadFTT = false; // avoid repeating display every cycle } /* Keep checking the tracker for a signal. If the tracker does not say anything, return without servicing the applet's thread. Drops through when tracker gives a completion signal */ try { tracker.waitForAll(); } catch(InterruptedException e){ return true; } return false; } // returns true when image loading has terminated loaded boolean imagesLoaded() { if(tracker == null) return true; if(loadingImages) { // if image loading process still running // Get the status of the image loading process int ts = tracker.statusAll(false); // if loading process has completed, indicate image loading failure if((ts & MediaTracker.ERRORED) != 0) { trackerError = true; /* If this is the first pass through here, display the error message and set the flag to avoid repeated dispays of this message. */ if(errorFTT) { mp.showMsg("Error: couldn't load images.", false, true); errorFTT = false; } } /* If tracker has completed its task, clear flag to indicate that image loading has terminated. */ if(ts == MediaTracker.COMPLETE) loadingImages = false; /* Else, the image loading process has just finished so refresh display if not already done. */ } else { killTracker(); mp.showMsg("Images Loaded.", true, true); } return false; } void killTracker() { /* If the tracker isn't already dead, remove (de-register) the images from it and then kill the tracker. */ if(tracker != null) { tracker.removeImage(movmap.IMG1,0); tracker.removeImage(movmap.IMG2,0); tracker.removeImage(movmap.IMG3,0); tracker.removeImage(movmap.IMG4,0); tracker = null; } } boolean TrackerError(){return trackerError;} }