使用文件更新JList

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

我正在尝试为学校项目中的一个提取文件的小程序。我正在使用JList显示所有提取的文件,但潜伏了许多小时之后,当文件夹中存在新文件时,我不知道如何进行此JList更新。由于批处理文件(实际的提取程序)需要花费大量的时间来完成,因此无法在按钮的ActionListener中正确刷新。我该如何使用它?

这是我用来查找某些扩展名的文件的类:

public class fileFinder {
    public static String[] thing() {
        File file = new File(".\\at9snfsbs");
        File[] files = file.listFiles(new FilenameFilter() {

            @Override
            public boolean accept(File dir, String name) {
                if (name.toLowerCase().endsWith(".at9")) {
                    return true;
                } else {
                    return false;
                }
            }
        });
        String[] fileNames = new String[files.length];
        for (int i = 0; i < files.length; i++) {
            fileNames[i] = files[i].getName();
        }

        return fileNames;
    }

}

这是JList:

        DefaultListModel model = new DefaultListModel();
        String[] things = fileFinder.thing();
        for (int i = 0; i < things.length; i++) {
            model.addElement(things[i]);
        }
        JList list = new JList(model);
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        scrollPane.setViewportView(list);

这是按钮的ActionListener,它启动一个批处理文件,该批处理文件是实际的转换器:

try {
    Runtime.getRuntime().exec("cmd /c start .\\at9snfsbs\\shit.bat");
    String[] thang = fileFinder.thing();
    model.clear();
    for (int i = 0; i < thang.length; i++) {
        model.addElement(thang[i]);
    };
} catch (IOException e1) {
    e1.printStackTrace();
}

我没有编码经验或擅长编码,所以将不胜感激!

java swing file file-io jlist
1个回答
0
投票

[Andrew Thompson:另请参阅When Runtime.exec() won't,以获取有关正确创建和处理流程的许多不错的技巧。然后忽略它指的是exec并使用ProcessBuilder创建过程。也可以将String arg分解为String[] args以解决诸如包含空格字符的路径之类的问题。

我让它与ProcessBuilderwaitFor()一起使用。

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