列表列表的元素为空,即使添加的项目不是

Elements of list of lists are null even though items added are not

出现问题的代码片段

public void saveFile() throws IOException {
        if (!wordsTable.getItems().isEmpty()) {
            TreeItem<List> selectedItem = (TreeItem<List>) filesTree.getSelectionModel().getSelectedItem();
            selectedFilePath = (String) selectedItem.getValue().get(1);
            File originalFile = new File(selectedFilePath);
            File tempFile = new File(originalFile.getParentFile().getAbsolutePath()+"/temp.csv");
            List<List<String>> tableData = new List<>() {};

            for (TableItem item : wordsTable.getItems()) {
                List<String> row = Arrays.asList(item.getWord(),item.getMeaning(),item.getPronunciation());
                System.out.println(row);
                tableData.add(row);
                System.out.println(tableData.get(0));
            }


            for (List<String> row : tableData) {
                System.out.println(row);
            }
            dataArrayToCSV(tempFile.getAbsolutePath(),tableData);
        } else {
            ConfirmationAlert.display("Error","Nothing to save");
        }
    }

我手动输入一些列表作为行,打印行和table数据的项目,这应该是列表的列表。当我打印该行时,它与我输入的一样,但 tableData 的项目都是空的。所以这会为每个循环引发一个 nullpointexception。

我似乎无法找到为什么 table数据的项目为空,即使我在其中放入了正确类型的数据。

当您编写此代码时:List<List<String>> tableData = new List<>() {};,您应该创建自己的 List 实现,但由于您根本没有覆盖任何方法,因此当您添加项目时,没有任何反应。

您应该使用 List 实现的新实例初始化 tableDate:List<List<String>> tableData = new ArrayList<>();

因为你已经用 JavaFX 标记了它,我猜你对 javafx.base 有依赖性,所以最好使用 ObservableList:ObservableList<ObservableList<String>> tableDate = FXCollections.observableArrayList(); 当然,这意味着你的第一个for循环应该做相应的修改:ObservableList<String> row = FXCollections.observableArrayList(item.getWord(), item.getMeaning(), item.getPronunciation());