Câu hỏi của tôi là: nếu hai chức năng này có điều gì đó khác biệt? Tôi có nghĩa là tôi biết rằng họ trả lại một cái gì đó khác nhau, nhưng có thể là số lượng các yếu tố trong một sẽ khác nhau sau đó trong một thứ hai. Tôi sẽ cố gắng để giải thích. Tôi đã triển khai TreeModel cho một trong các lớp học của tôi đang cố gắng tạo ra một khung nhìn đẹp trên các tệp trên máy tính dựa trên JTree. Vì vậy, đây là một phần của nó: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;
}
Tôi đã đánh dấu mã thú vị. Nếu tôi thay đổi hai dòng này cho nhận xét này, đôi khi tôi nhận được NullPointerException
sau khi tải TreeModel: jtree.setModel(treeModel);
. Điều này không được chú ý không gây ra bất kỳ rắc rối nào. Tôi đã kiểm tra các tài liệu và nó nói không có gì bất thường bao gồm cả trả về null bởi cả hai phương pháp. Chuyện gì đang xảy ra ở đây?
Lý do duy nhất họ có thể trả về các kết quả khác nhau là do trạng thái của hệ thống tệp đã thay đổi giữa các cuộc gọi (tệp được thêm/xóa). Lý do duy nhất bạn cũ có được một NPE từ File # listFiles là bởi vì một trong hai đường dẫn mà đối tượng tập tin đại diện không tồn tại hoặc không phải là một thư mục – MadProgrammer