我偶然发现了一个 Java 问题,这似乎很奇怪,所以我在互联网上没有找到任何东西。
我想做一个小程序,只搜索特定文件以删除它们。(此时还没有)现在,程序只是搜索目录和子目录中的所有文件。它可以工作,但有时(大约 50/50)我用来显示文件的 JList 不显示任何内容。(这是我遇到的问题)我没有更改任何文件,.jar 没有任何更改,它有时只是不显示元素。
我还检查了数组是否可能为空,其中是否有元素,即使列表没有显示它们。如果您知道对此的解决方案,那就太好了。谢谢你。
这是代码:(你知道,我没有自己编写函数 GetAllFiles)
变量:
JList output;
JScrollPane outputScrollPanel;
DefaultListModel outputContent;
String[] files;
int fileIndex;
File source;
构造函数:
add(output = new JList());
outputContent = new DefaultListModel();
output.setModel(outputContent);
add(outputScrollPanel = new JScrollPane(output));
outputScrollPanel.setBounds(20, 20, getWidth() - 50, getHeight() - 40);
files = new String[0];
fileIndex = 0;
SearchFiles();
SearchFiles 功能与 GetAllFiles 一起(我尽了最大努力,没有使用多余的名称;))
private void SearchFiles() {
source = new File("");
GetAllFiles(source);
for(int i = 0; i < fileIndex; i++) {
outputContent.addElement(files[i]);
}
}
private void GetAllFiles(File dir) {
File[] fileList = dir.getAbsoluteFile().listFiles();
if (fileList != null) {
for (int i = 0; i < fileList.length; i++) {
if (fileList[i].isDirectory()) {
GetAllFiles(fileList[i]);
} else {
if(fileIndex%100 == 0) {
IncreaseFileListSize();
}
// i am so proud of this one: (it just adds the relative path + file name to the files-array
files[fileIndex] = fileList[i].toString().substring(source.getAbsolutePath().toString().length()+1);
fileIndex++;
}
}
}
}