我正在编写一个程序,该程序涉及对许多图像的自定义搜索。当用户输入他们的搜索条件时,从缓存或服务器中检索相应的图像。我有一个 JTable,它显示指向相应图像的链接。当用户单击链接时,图像将显示在 JPanel 上。单击链接时,我可以从硬盘驱动器读取图像,但速度不如我想的那么快。加载它需要几秒钟。我曾尝试创建一个 BufferedImages 数组,但如果搜索返回许多结果,我会去 oom。我想知道单击链接时使图像显示得更快的最佳方法是什么。
这是我获取图像的方法...
Public void getFile(String fileName){
File file = new File("./cache/"+fileName);
boolean exists = file.exists();
BufferedImage returnImage =null;
if(exists){
try {
returnImage = ImageIO.read(file);
System.out.println("Found In Cache!");
} catch (IOException|IndexOutOfBoundsException e) {
try {
if(fileName != null){
returnImage = downloadImage(fileName);
System.out.println("Found ON Server :(");
}
} catch (IOException |IndexOutOfBoundsException ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
}
}
}else{
try {
if(fileName != null){
returnImage = downloadImage(fileName);
System.out.println("Found ON Server :(");
}
} catch (IOException |IndexOutOfBoundsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return returnImage;
}
}
这就是我把它们放在一个数组中的地方......
BufferedImage[] images = new BufferedImage[numOfSearchResults];
for(SearchResult r: results){
images[i] = imageCache.getFile(r.imageName);
}
基本上,我只是想知道在不出现 oom 的情况下预加载图像的最佳方法是什么。提前致谢