私のアプリケーションは、基本的に写真ブラウザです。私のアプローチ(私を判断しないでください、私は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;
}
そして、すべてのデータをフェッチした後、画像を my に追加します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
が、使い方がよくわからない。ありがとう。