File.list() vs File.listFiles()

Мой вопрос: если эти две функции имеют что-то другое? Я имею в виду, что я знаю, что они возвращают что-то другое, но возможно ли, что количество элементов в одном будет другим, а во втором. Я попытаюсь объяснить. Я реализовал TreeModel для одного из моих классов, пытаясь сделать хороший просмотр файлов на ПК на основе JTree. Итак, вот его часть:

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;
}

Я отметил интересный код. Если я изменил эту две строки для этой прокомментированной, иногда я получаю NullPointerException после загрузки TreeModel: jtree.setModel(treeModel);. Это без ранения не вызывает никаких проблем. Я проверил документы и не сказал ничего необычного, включая возврат null этими двумя методами. Что здесь происходит?