我的应用程序基本上是一个照片浏览器。我的方法(不要评判我,我是java新手)是ArrayList
填充BufferedImages
然后将图像添加到JList
(左侧)。
这就是我获得图像的方式:
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
但我真的不知道如何使用它。谢谢。