के रूप में प्रदर्शित करना मैं एक ऐसा एप्लिकेशन लिख रहा हूं जो इमेज इंकन्स (जेएलएबल के भीतर) के रूप में छवियों को पढ़ता और प्रदर्शित करता है, एप्लिकेशन को जेपीईजी और बिटमैप्स का समर्थन करने में सक्षम होना चाहिए।जावा: छवियों को पढ़ना और छवि आइकन
jpegs के लिए मुझे लगता है कि फ़ाइल आइकन को सीधे इमेज आइकन कन्स्ट्रक्टर पर पास करना ठीक काम करता है (यहां तक कि दो बड़े jpegs प्रदर्शित करने के लिए भी), हालांकि अगर मैं छवि प्राप्त करने के लिए ImageIO.read का उपयोग करता हूं और फिर छवि को छवि आइकन कन्स्ट्रक्टर में पास करता हूं, I दूसरी छवि पढ़ी जाने पर आउटऑफमेमरी एरर (जावा हीप स्पेस) प्राप्त करें (पहले की तरह ही छवियों का उपयोग करें)।
बिटमैप्स के लिए, यदि मैं छवि आइकन पर फ़ाइल नाम पास करके पढ़ने की कोशिश करता हूं, तो छवियों के साथ छवि को पढ़कर और छवि इंक कन्स्ट्रक्टर में इस छवि का उपयोग करके कुछ भी प्रदर्शित नहीं होता है।
मैं अन्य फ़ोरम पोस्ट पढ़ने से समझता हूं कि विभिन्न विधियों के लिए दो विधियां समान कार्य नहीं करती हैं, इसलिए बिटमैप्स के साथ जावा की संगतता समस्याएं नीचे आती हैं, हालांकि मेरी समस्या के आसपास एक तरीका है ताकि मैं उपयोग कर सकूं OutOfMemoryError के बिना बिटमैप्स और jpegs दोनों के लिए एक ही विधि?
(मैं ढेर आकार यदि संभव हो तो बढ़ाने के लिए होने से बचने के लिए करना चाहते हैं!)
OutOfMemoryError इस लाइन से शुरू हो रहा है:
img = getFileContentsAsImage(file);
और विधि परिभाषा है:
public static BufferedImage getFileContentsAsImage(File file) throws FileNotFoundException {
BufferedImage img = null;
try {
ImageIO.setUseCache(false);
img = ImageIO.read(file);
img.flush();
} catch (IOException ex) {
//log error
}
return img;
}
स्टैक ट्रेस है:
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:58)
at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397)
at java.awt.image.Raster.createWritableRaster(Raster.java:938)
at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1056)
at javax.imageio.ImageReader.getDestination(ImageReader.java:2879)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:925)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:897)
at javax.imageio.ImageIO.read(ImageIO.java:1422)
at javax.imageio.ImageIO.read(ImageIO.java:1282)
at framework.FileUtils.getFileContentsAsImage(FileUtils.java:33)
कृपया कुछ नमूना कोड पोस्ट करें जो OutOfMemoryError को ट्रिगर करता है। – Thomas