如何在 Java 中减少 ImageIcon 双数组执行时间



>我有一个类,它创建一个双文件数组,给定一个指定每个文件夹名称的字符串数组。然后,这些文件用于创建图像图标的双重数组,每个图像文件一个。带有其中一个 ImageIcon 的 JLabel 被添加到添加到 JFrame 的 JPanel 中,但这大约需要五秒钟。如何减少此执行时间?

class Test extends JFrame
{    
public static void main (String [] args) {
String [] issues = {"economic", "social", "immigration"};
Test test = new Test(issues);
}
public Test (String [] issues) {
File [][] files = getFiles(issues);
ImageIcon [][] icons = getIconArrays(files);
getPanel(icons);
setVisible(true);
setSize(700, 300);
setLocation(550, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE); 
}
public File [][] getFiles(String [] issues){
File [][] files = new File[issues.length][];
for (int i=0;i<files.length;i++) {
File folder = new File("/Users/hecto/Documents/BlueJ Projects/politic/questions/" +
issues[i] + "/");
files[i] = folder.listFiles();
}
return files;
}
public ImageIcon [][] getIconArrays(File [][] files){
ImageIcon [][] icons = new ImageIcon[files.length][files[0].length];
for(int i=0;i<files.length;i++){
for(int j=0;j<files[i].length;j++){
icons[i][j] = new ImageIcon(files[i][j].toString());
icons[i][j] = new ImageIcon
(icons[i][j].getImage().getScaledInstance(150, 150, java.awt.Image.SCALE_SMOOTH));
}
}
return icons;
}
public void getPanel(ImageIcon [][] icons){
JPanel picPanel = new JPanel(new FlowLayout());
JLabel label = new JLabel(icons[0][0]); //initially set to first image
picPanel.add(label);
add(picPanel);
}
}

我确信问题出在创建 ImageIcon 双数组。

1(您可以使用SCALE_FAST而不是SCALE_SMOOTH,具体取决于图像的数量,它将大大增加加载时间。

2(使用并行化(例如,使用ExecutorService(。

没有更多的选择,图像加载需要时间(当然您可以使用不同的图像比例、格式等,但我认为这是显而易见的(。 在初始化 Swing 时在后台加载它们(也具有并行化(。

最新更新