我无法将JLabel添加到集合中。 listOfFiles == 3个不同的文件。 System.out.println(set.size())仍返回0.
public HashSet<JLabel> startCheckedFiles(){
HashSet <JLabel> set = new HashSet<>();
File folder = new File("utwory\\");
File[] listOfFiles = folder.listFiles();
final Runnable r = new Runnable() {
public void run() {
while(1==1) {
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
set.add(new JLabel(listOfFiles[i].getName())); //listOfFiles == 3 diffrent files
}
}
}
}
};
final Thread t = new Thread(r);
t.start();
System.out.println(set.size()); // return 0
return set;
}
为什么HashSet大小仍为0?
答案 0 :(得分:0)
System.out.println(set.size())
打印零可能有两个原因:
listOfFiles
是空的。但您的代码还存在其他问题:
startCheckedFiles()
返回,直到设置已填充为止。HashSet
,并且父线程正在查看集合的大小... 而不进行任何同步。而且(大概)startCheckedFiles()
的来电者也会这样做。这是&#34;不可预测事情发生的一个秘诀&#34;。