再次挣扎。
我递归地搜索目录,并通过检查其扩展名来挑选音频文件。一旦找到,每个都将添加到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);
进入不同的领域,但这通常导致什么都没有添加到列表中。
我认为必须发生的是,每次找到新文件夹时,都会以某种方式重置列表模型,并将文件添加到现在为空的模型中。
有没有解决的办法?我在代码中做些奇怪的操作导致了这种明显的复位吗?
提前谢谢了,
盖伊
问题是您DefaultListModel
在List()
方法的每次调用中都创建了一个新的。这解释了为什么您认为
每次找到新文件夹时,都会以某种方式重置列表模型,并将文件添加到现在为空的模型中
我认为您想将文件添加到相同的文件,DefaultListModel
以便在List()
方法之外创建文件,然后将其作为参数传递或使其成为List()
可以访问的实例字段。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句