我有一个类,它创建一个文件的双重数组,给定一个字符串数组,该字符串数组指定每个文件夹的名称。然后,使用文件创建ImageIcons的双数组,每个图像文件一个。将具有ImageIcons之一的JLabel添加到JPanel,并将其添加到JFrame,但这大约需要五秒钟。如何减少执行时间?
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时(也通过并行化)将它们加载到后台。