我正在为提取文件的学校项目制作一个小程序。我正在使用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();
}
我没有编码经验或经验丰富,因此不胜感激!
最佳答案
安德鲁·汤普森(Andrew Thompson):另请参阅When Runtime.exec() won't,以获取有关正确创建和处理流程的许多好技巧。然后忽略它引用的exec
,并使用ProcessBuilder
创建该进程。还可以将String arg
分解为String[] args
以解决诸如包含空格字符的路径之类的问题。
我在ProcessBuilder
和waitFor()
下使用它。