我的申請基本上是photo browser。我的方法(不要判斷我,我是新來的java)是有一個ArrayList
填充BufferedImages
,然後將圖像添加到JList
(左)。java堆內存問題
這是我得到的圖像:
private void getFullImage() {
BufferedImage im = null;
ImageReader imageReader = null;
try {
System.out.println("Loading "+original+"...");
String suffix = Utils.getFileExt(original.getName(), "jpg");
@SuppressWarnings("rawtypes")
Iterator readers = ImageIO.getImageReadersBySuffix(suffix);
imageReader = (ImageReader)readers.next();
imageReader.setInput(new FileImageInputStream(original));
im = imageReader.read(0);
imageReader.dispose();
} catch (Exception e)
{
e.printStackTrace();
}
this.img = im;
}
,然後,我拿來所有的數據後,我將圖像添加到我的JList
:
Vector vector = new Vector();
JPanel container = null;
PhotoPanel pp = null;
Photo p = null;
for(int i=0;i<files.length;i++)
{
p = new Photo(files[i]);
pp = new PhotoPanel(p);
container = new JPanel(new BorderLayout());
container.add(pp,BorderLayout.CENTER);
container.setBorder(BorderFactory.createTitledBorder(p.getTitle()));
vector.addElement(container);
}
plist.setListData(vector);
如果我有例如10個文件,該應用程序工作得很好。問題是,當我有更多的圖像顯示。然後我會得到一個例外:Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
。所以,我知道我的方法非常糟糕,我想知道我應該如何拍攝和存儲所有圖像,並將它們顯示在JList
中。也許使用緩存?我讀了一些關於SoftReference
的內容,但我真的不知道如何使用它。謝謝。
@Andrew會推動邊界,但仍然不適用於任意數量的照片。 – 2012-04-16 13:13:57
@Jakub我認爲[@TheLima](http://stackoverflow.com/a/10174948/418556)釘了它。噪音已刪除。 – 2012-04-16 13:22:51