Обновление JList с помощью файлов - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь сделать небольшую программу для школьного проекта, которая извлекает файлы. Я использую JList для отображения всех извлеченных файлов, но после многих часов я не могу понять, как сделать это обновление JList, когда в папке есть новые файлы. Он не обновляет sh должным образом в ActionListener кнопки, так как пакетный файл (фактический экстрактор) занимает различное время до завершения sh. Как мне заставить это работать?

Это класс, который я использую для поиска файлов с определенным расширением:

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();
}

У меня нет опыта или хорошего кодирования, поэтому любая помощь будет признательна!

1 Ответ

0 голосов
/ 03 мая 2020

Эндрю Томпсон: См. Также Когда Runtime.exe c () не будет за многие полезные советы по правильному созданию и обработке процесса. Затем проигнорируйте его как exec и используйте ProcessBuilder для создания процесса. Также разбейте String arg на String[] args для учета таких вещей, как пути, содержащие пробелы.

Я получил его, работая с ProcessBuilder и waitFor().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...