Мое приложение в основном photo browser. Мой подход (не судите меня, я новичок в java) должен был иметь ArrayList
, заполненный BufferedImages
, а затем добавить изображения в JList
(слева).java heap memory issue
Это, как я получаю изображение:
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
, но я действительно не знаю, как его использовать. Благодарю.
@ Андрю, который будет толкать границу, но все равно не будет работать для произвольного количества фотографий. –
@Jakub думаю [@ TheLima] (http://stackoverflow.com/a/10174948/418556) гвоздь. Шум удален. –