我正在创建一个图像查看应用程序,我在jlist中显示所选文件夹中的所有图像。因此,它们将显示在一行中,然后当用户浏览列表时,图像将显示在同一窗口中的另一个jlabel上。问题是它适用于小图像,但对于壁纸和其他具有大图像的文件夹,我得到了Java堆异常。解决这个问题的最佳方法是什么?
public void loadImages(File directory) throws IOException, URISyntaxException {
File[] imageFiles = directory.listFiles();
model.removeAllElements();
for (int ii=0; ii<imageFiles.length; ii++) {
model.addElement(ImageIO.read(imageFiles[ii]));
}
}
答案 0 :(得分:1)
一种方法:
当您将每个图像读入ListModel时,您需要创建图像的“缩略图版本”。这将最小化在JList中显示图像所需的内存量。
当您选择要在标签中显示的图像时,您需要重新读取图像,以便以原始尺寸显示图像。