【发布时间】:2012-04-27 19:18:12
【问题描述】:
我的申请基本上是photo browser。我的方法(不要评判我,我是 java 新手)是用 BufferedImages 填充 ArrayList,然后将图像添加到 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 的东西,但我真的不知道如何使用它。谢谢。
【问题讨论】:
-
@Andrew 会突破界限,但仍然不适用于任意数量的照片。
-
@Jakub 我认为@TheLima 搞定了。噪音已删除。
标签: java caching bufferedimage