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

问题描述 投票:1回答:1

我有一个类,它创建一个文件的双重数组,给定一个字符串数组,该字符串数组指定每个文件夹的名称。然后,使用文件创建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双数组的创建。

java swing file imageicon execution-time
1个回答
0
投票

1)您可以使用SCALE_FAST而不是SCALE_SMOOTH,具体取决于图像数量,这将使您明显增加加载时间。

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

没有更多选择,图像加载会花费很多时间(当然,您可以使用其他图像比例,格式等,但是我认为这很明显)。在初始化Swing时(也通过并行化)将它们加载到后台。

© www.soinside.com 2019 - 2024. All rights reserved.