Sorum şu: Bu iki fonksiyonun farklı bir şey var mı? Demek istediğim farklı bir şey döndürdüğünü biliyorum, ancak birindeki elemanların sayısının ikincisinden farklı olması muhtemeldir. Anlatmaya çalışacağım. JTree'ye dayanan PC'deki dosyalarda güzel bir görünüm oluşturmaya çalışırken sınıfımdan bir tanesi için TreeModel uygulamasını hayata geçirdim. İşte burada bunun bir kısmı:File.list() vs File.listFiles()
public Object getChild(Object parent, int index) {
File[] children = ((File) parent).listFiles();
if(children == null || index < 0 || index >= children.length) {
return null;
}
File result = new MyFile(children[index]);
return result;
}
public int getChildCount(Object parent) {
//---
//String[] children = ((File)parent).list();
File[] children = ((File)parent).listFiles();
//---
if(children == null) {
return 0;
}
return children.length;
}
İlginç bir kod yazdım. Bu iki satırı değiştirdiysem, bazen TreeModel'i yükledikten sonra NullPointerException
alırım: jtree.setModel(treeModel);
. Bu rahatsız edilmeyen sorunlara neden olmaz. Dokümanları kontrol ettim ve her iki yöntemle de null döndürme dahil olağandışı hiçbir şey söylemiyor. Burada neler oluyor?
Farklı sonuçlar verebilmesinin tek nedeni, dosya sistemi durumlarının aramalar arasında değişmesidir (bir dosya eklendi/kaldırıldı). File # listFiles'den bir NPE almanın tek nedeni, ya dosya nesnesinin temsil ettiği yolun mevcut olmaması ya da bir dizin olmamasıdır. – MadProgrammer