再次挣扎。
我递归搜索目录并通过检查其扩展名来挑选音频文件。一旦找到,每个都将被添加到JList(在主类中 - 此处未显示)。但是,只有最后一个文件夹的文件被添加到列表中。这是代码:
public void List(String path) throws InterruptedException, IOException {
File root = new File(path);
File[] list = root.listFiles();
DefaultListModel lm = new DefaultListModel();
if (list == null) {
return;
}
for (File f : list) {
if (f.isDirectory()) {
List(f.getAbsolutePath());
} else if (f.isFile()) {
String outPath = f.getAbsolutePath();
try {
String ext = outPath.substring(outPath.lastIndexOf(".") + 1);
if (ext.equals("wma") || ext.equals("m4a") || ext.equals("mp3")) {
lm.addElement(f.getAbsolutePath());
}
} catch (Exception e) {
System.out.println(outPath + " is not a valid file!!!!!");
}
HomeScreen.Library.setModel(lm);
}
}
}
我尝试用简单的lm.addElement(f.getAbsolutePath())
替换System.out.println(f.getAbsolutePath)
,并按预期打印出所有文件。我也尝试将HomeScreen.Library.setModel(lm);
移到不同的区域,但这通常会导致没有任何内容添加到列表中。
我认为必须发生的是,每次找到新文件夹时,都会以某种方式重置列表模型,并将文件添加到现在为空的模型中。
有解决方法吗?我在代码中做了些什么,导致这种明显的重置?
非常感谢,
盖
答案 0 :(得分:1)
问题是您在DefaultListModel
方法的每次调用中都会创建一个新的List()
。这就解释了为什么你认为
每次找到新文件夹时,都会以某种方式重置列表模型,并将文件添加到现在空的模型中
我认为您希望将文件添加到同一DefaultListModel
,因此请在List()
方法之外创建它,并将其作为参数传递或将其设为List()
的实例字段可以访问。
答案 1 :(得分:1)
您调用每个调用的tyme方法创建新模型。您需要创建一次模型并更新它。
我建议将DefaultListModel lm = new DefaultListModel();
移出您的方法并传递参考。同时将HomeScreen.Library.setModel(lm);
移出您的方法,并在方法调用之后将其放置。
DefaultListModel lm = new DefaultListModel();
some.List(path, lm);
HomeScreen.Library.setModel(lm);
PS:通过java名称约定,方法名称从情人案例字母开始。