非常に奇妙に思える Java の問題に出くわしたので、インターネットで何も見つかりませんでした。
特定のファイルを検索して削除するだけの小さなプログラムを作成したいと思います。(まだこの時点ではありません) 現時点では、プログラムはディレクトリとサブディレクトリ内のすべてのファイルを検索するだけです。それは機能しますが、時々 (約 50/50) ファイルを表示するために使用する JList に何も表示されません。(これは私が抱えている問題です)私はファイルを変更しません.jarには何も変更しません.時々要素が表示されません.
また、リストに要素が表示されていない場合でも、配列が空であるかどうか、要素が含まれているかどうかを確認しました。これに対する解決策を知っていれば、それは素晴らしいことです。ありがとうございました。
コードは次のとおりです。
変数:
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();
GetAllFiles と一緒に SearchFiles 関数 (冗長な名前を使用せずに最善を尽くしました ;))
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++;
}
}
}
}