{"id":10490,"date":"2015-08-29T00:25:33","date_gmt":"2015-08-29T04:25:33","guid":{"rendered":"http:\/\/bangla.salearningschool.com\/?p=10490"},"modified":"2015-08-24T10:31:14","modified_gmt":"2015-08-24T14:31:14","slug":"controlling-image-loading","status":"publish","type":"post","link":"http:\/\/bangla.sitestree.com\/?p=10490","title":{"rendered":"Controlling Image Loading"},"content":{"rendered":"<pre>~~~~~~~~~~~~~~~~~~~\r\nImageBox.java A class that incorrectly tries to load an image and draw an outline around it. The problem is that the size of the image is requested before the image is completely loaded, thus, returning a width and height of -1.\r\n~~~~~~~~~~~~~~~~~~~\r\nimport java.applet.Applet;\r\nimport java.awt.*;\r\n\r\n\/** A class that incorrectly tries to load an image and draw an\r\n\u00a0*\u00a0 outline around it. Don't try this at home.\r\n\u00a0*\r\n\u00a0********************\r\n\r\npublic class ImageBox extends Applet {\r\n\u00a0 private int imageWidth, imageHeight;\r\n\u00a0 private Image image;\r\n\r\n\u00a0 public void init() {\r\n\u00a0\u00a0\u00a0 String imageName = getParameter(\"IMAGE\");\r\n\u00a0\u00a0\u00a0 if (imageName != null) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 image = getImage(getDocumentBase(), imageName);\r\n\u00a0\u00a0\u00a0 } else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 image = getImage(getDocumentBase(), \"error.gif\");\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 setBackground(Color.white);\r\n\r\n\u00a0\u00a0\u00a0 \/\/ The following is wrong, since the image won't be done\r\n\u00a0\u00a0\u00a0 \/\/ loading, and -1 will be returned.\r\n\u00a0\u00a0\u00a0 imageWidth = image.getWidth(this);\r\n\u00a0\u00a0\u00a0 imageHeight = image.getHeight(this);\r\n\u00a0 }\r\n\r\n\u00a0 public void paint(Graphics g) {\r\n\u00a0\u00a0\u00a0 g.drawImage(image, 0, 0, this);\r\n\u00a0\u00a0\u00a0 g.drawRect(0, 0, imageWidth, imageHeight);\r\n\u00a0 }\r\n}\r\n&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;\r\nBetterImageBox.java An improved version of ImageBox.java. Here a MediaTracker is used to block (wait till the image is completely loaded) before preceding to determine the image size.\r\n&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;\r\nimport java.applet.Applet;\r\nimport java.awt.*;\r\n\r\n\/** This version fixes the problems associated with ImageBox by\r\n\u00a0*\u00a0 using a MediaTracker to be sure the image is loaded before\r\n\u00a0*\u00a0 you try to get its dimensions.\r\n\u00a0*\r\n\u00a0*********************************\r\n\r\npublic class BetterImageBox extends Applet {\r\n\u00a0 private int imageWidth, imageHeight;\r\n\u00a0 private Image image;\r\n\r\n\u00a0 public void init() {\r\n\u00a0\u00a0\u00a0 String imageName = getParameter(\"IMAGE\");\r\n\u00a0\u00a0\u00a0 if (imageName != null) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 image = getImage(getDocumentBase(), imageName);\r\n\u00a0\u00a0\u00a0 } else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 image = getImage(getDocumentBase(), \"error.gif\");\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 setBackground(Color.white);\r\n\u00a0\u00a0\u00a0 MediaTracker tracker = new MediaTracker(this);\r\n\u00a0\u00a0\u00a0 tracker.addImage(image, 0);\r\n\u00a0\u00a0\u00a0 try {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 tracker.waitForAll();\r\n\u00a0\u00a0\u00a0 } catch(InterruptedException ie) {}\r\n\u00a0\u00a0\u00a0 if (tracker.isErrorAny()) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.println(\"Error while loading image\");\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/\/ This is safe: image is fully loaded\r\n\u00a0\u00a0\u00a0 imageWidth = image.getWidth(this);\r\n\u00a0\u00a0\u00a0 imageHeight = image.getHeight(this);\r\n\u00a0 }\r\n\r\n\u00a0 public void paint(Graphics g) {\r\n\u00a0\u00a0\u00a0 g.drawImage(image, 0, 0, this);\r\n\u00a0\u00a0\u00a0 g.drawRect(0, 0, imageWidth, imageHeight);\r\n\u00a0 }\r\n}\r\n&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;\r\nTrackerUtil.java A utility class that lets you load and wait for an image in a single swoop.\r\n&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;\r\nimport java.awt.*;\r\n\r\n\/** A utility class that lets you load and wait for an image or\r\n\u00a0*\u00a0 images in one fell swoop. If you are loading multiple\r\n\u00a0*\u00a0 images, only use multiple calls to waitForImage if you\r\n\u00a0*\u00a0 need loading to be done serially. Otherwise, use\r\n\u00a0*\u00a0 waitForImages, which loads concurrently, which can be\r\n\u00a0*\u00a0 much faster.\r\n\u00a0*\r\n\u00a0*******************\r\n\r\npublic class TrackerUtil {\r\n\u00a0 public static boolean waitForImage(Image image, Component c) {\r\n\u00a0\u00a0\u00a0 MediaTracker tracker = new MediaTracker(c);\r\n\u00a0\u00a0\u00a0 tracker.addImage(image, 0);\r\n\u00a0\u00a0\u00a0 try {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 tracker.waitForAll();\r\n\u00a0\u00a0\u00a0 } catch(InterruptedException ie) {}\r\n\u00a0\u00a0\u00a0 if (tracker.isErrorAny()) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 return(false);\r\n\u00a0\u00a0\u00a0 } else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 return(true);\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0 }\r\n\r\n\u00a0 public static boolean waitForImages(Image[] images,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Component c) {\r\n\u00a0\u00a0\u00a0 MediaTracker tracker = new MediaTracker(c);\r\n\u00a0\u00a0\u00a0 for(int i=0; i&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>~~~~~~~~~~~~~~~~~~~ ImageBox.java A class that incorrectly tries to load an image and draw an outline around it. The problem is that the size of the image is requested before the image is completely loaded, thus, returning a width and height of -1. ~~~~~~~~~~~~~~~~~~~ import java.applet.Applet; import java.awt.*; \/** A class that incorrectly tries to load &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"http:\/\/bangla.sitestree.com\/?p=10490\">Continue reading<\/a><\/p>\n","protected":false},"author":130,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1417,1424],"tags":[706,308,285],"class_list":["post-10490","post","type-post","status-publish","format-standard","hentry","category-code-programming-samples--","category-javaj2eej2me","tag-code","tag-java","tag-285","item-wrap"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":27154,"url":"http:\/\/bangla.sitestree.com\/?p=27154","url_meta":{"origin":10490,"position":0},"title":"Controlling Image Loading #Programming Code Examples #Java\/J2EE\/J2ME #Applets and Basic Graphics","author":"Author-Check- Article-or-Video","date":"May 12, 2021","format":false,"excerpt":"~~~~~~~~~~~~~~~~~~~ ImageBox.java A class that incorrectly tries to load an image and draw an outline around it. The problem is that the size of the image is requested before the image is completely loaded, thus, returning a width and height of -1. ~~~~~~~~~~~~~~~~~~~ import java.applet.Applet; import java.awt.*; \/** A class\u2026","rel":"","context":"In &quot;FromSitesTree.com&quot;","block_context":{"text":"FromSitesTree.com","link":"http:\/\/bangla.sitestree.com\/?cat=1917"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10487,"url":"http:\/\/bangla.sitestree.com\/?p=10487","url_meta":{"origin":10490,"position":1},"title":"Loading Images","author":"","date":"August 29, 2015","format":false,"excerpt":"JavaMan1.java Applet that loads an image from a relative URL. ************************************************************* import java.applet.Applet; import java.awt.*; \/** An applet that loads an image from a relative URL. \u00a0* >>>>>>>>>>>>>>>>>>> public class JavaMan1 extends Applet { \u00a0 private Image javaMan; \u00a0 public void init() { \u00a0\u00a0\u00a0 javaMan = getImage(getCodeBase(),\"images\/Java-Man.gif\"); \u00a0 } \u00a0\u2026","rel":"","context":"In &quot;Code . Programming Samples . \u09aa\u09cd\u09b0\u09cb\u0997\u09cd\u09b0\u09be\u09ae \u0989\u09a6\u09be\u09b9\u09b0\u09a8&quot;","block_context":{"text":"Code . Programming Samples . \u09aa\u09cd\u09b0\u09cb\u0997\u09cd\u09b0\u09be\u09ae \u0989\u09a6\u09be\u09b9\u09b0\u09a8","link":"http:\/\/bangla.sitestree.com\/?cat=1417"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27152,"url":"http:\/\/bangla.sitestree.com\/?p=27152","url_meta":{"origin":10490,"position":2},"title":"Loading Images #Programming Code Examples #Java\/J2EE\/J2ME #Applets and Basic Graphics","author":"Author-Check- Article-or-Video","date":"May 12, 2021","format":false,"excerpt":"JavaMan1.java Applet that loads an image from a relative URL. ************************************************************* import java.applet.Applet; import java.awt.*; \/** An applet that loads an image from a relative URL. * >>>>>>>>>>>>>>>>>>> public class JavaMan1 extends Applet { private Image javaMan; public void init() { javaMan = getImage(getCodeBase(),\"images\/Java-Man.gif\"); } public void paint(Graphics g) {\u2026","rel":"","context":"In &quot;FromSitesTree.com&quot;","block_context":{"text":"FromSitesTree.com","link":"http:\/\/bangla.sitestree.com\/?cat=1917"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10402,"url":"http:\/\/bangla.sitestree.com\/?p=10402","url_meta":{"origin":10490,"position":3},"title":"Demonstrates using a TexturePaint to fill an shape with a tiled image","author":"","date":"August 28, 2015","format":false,"excerpt":"^^^^^^^^^^^^^^^^^ TiledImages.java Demonstrates using a TexturePaint to fill an shape with a tiled image. Uses the following class and images: \u00a0\u00a0\u00a0 * ImageUtilities.java Simplifies creating a BufferedImage from an image file. ~~~~~~~~~~~~~~~~~~ import javax.swing.*; import java.awt.*; import java.awt.geom.*; import java.awt.image.*; \/** An example of using TexturePaint to fill objects with\u2026","rel":"","context":"In &quot;Code . Programming Samples . \u09aa\u09cd\u09b0\u09cb\u0997\u09cd\u09b0\u09be\u09ae \u0989\u09a6\u09be\u09b9\u09b0\u09a8&quot;","block_context":{"text":"Code . Programming Samples . \u09aa\u09cd\u09b0\u09cb\u0997\u09cd\u09b0\u09be\u09ae \u0989\u09a6\u09be\u09b9\u09b0\u09a8","link":"http:\/\/bangla.sitestree.com\/?cat=1417"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":26880,"url":"http:\/\/bangla.sitestree.com\/?p=26880","url_meta":{"origin":10490,"position":4},"title":"Demonstrates using a TexturePaint to fill an shape with a tiled image #Programming Code Examples #Java\/J2EE\/J2ME #Drawing","author":"Author-Check- Article-or-Video","date":"May 4, 2021","format":false,"excerpt":"^^^^^^^^^^^^^^^^^ TiledImages.java Demonstrates using a TexturePaint to fill an shape with a tiled image. Uses the following class and images: * ImageUtilities.java Simplifies creating a BufferedImage from an image file. ~~~~~~~~~~~~~~~~~~ import javax.swing.*; import java.awt.*; import java.awt.geom.*; import java.awt.image.*; \/** An example of using TexturePaint to fill objects with tiled\u2026","rel":"","context":"In &quot;FromSitesTree.com&quot;","block_context":{"text":"FromSitesTree.com","link":"http:\/\/bangla.sitestree.com\/?cat=1917"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10385,"url":"http:\/\/bangla.sitestree.com\/?p=10385","url_meta":{"origin":10490,"position":5},"title":"CircleDrawer3.java Applet that uses a named nested class to handle mouse events and draw circles. Illustrates third approach to event-handling with listeners: using inner classes.","author":"","date":"August 27, 2015","format":false,"excerpt":"import java.applet.Applet; import java.awt.*; import java.awt.event.*; \/** Draw circles centered where the user clicks. \u00a0*\u00a0 Uses named inner classes. \u00a0* \u00a0 \u00a0****************** public class CircleDrawer3 extends Applet { \u00a0 public void init() { \u00a0\u00a0\u00a0 setForeground(Color.blue); \u00a0\u00a0\u00a0 addMouseListener(new CircleListener()); \u00a0 } \u00a0 private class CircleListener extends MouseAdapter { \u00a0\u00a0\u00a0 private int\u2026","rel":"","context":"In &quot;Code . Programming Samples . \u09aa\u09cd\u09b0\u09cb\u0997\u09cd\u09b0\u09be\u09ae \u0989\u09a6\u09be\u09b9\u09b0\u09a8&quot;","block_context":{"text":"Code . Programming Samples . \u09aa\u09cd\u09b0\u09cb\u0997\u09cd\u09b0\u09be\u09ae \u0989\u09a6\u09be\u09b9\u09b0\u09a8","link":"http:\/\/bangla.sitestree.com\/?cat=1417"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"http:\/\/bangla.sitestree.com\/index.php?rest_route=\/wp\/v2\/posts\/10490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/bangla.sitestree.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/bangla.sitestree.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/bangla.sitestree.com\/index.php?rest_route=\/wp\/v2\/users\/130"}],"replies":[{"embeddable":true,"href":"http:\/\/bangla.sitestree.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10490"}],"version-history":[{"count":1,"href":"http:\/\/bangla.sitestree.com\/index.php?rest_route=\/wp\/v2\/posts\/10490\/revisions"}],"predecessor-version":[{"id":10491,"href":"http:\/\/bangla.sitestree.com\/index.php?rest_route=\/wp\/v2\/posts\/10490\/revisions\/10491"}],"wp:attachment":[{"href":"http:\/\/bangla.sitestree.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10490"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/bangla.sitestree.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10490"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/bangla.sitestree.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}