列表列表的元素为空,即使添加的项目不是
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());
出现问题的代码片段
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());