在Java中,二维数组实际上是数组的数组。您实例化了数组offset
,但从未实例化它包含的单个数组。
因此,当您尝试分配给数组column
的元素offset[row]
时,
offset[row][column] = ... ;
您得到一个NullPointerException
,因为offset[row]
尚未初始化,但仍为null
。
您需要做类似的事情
double[][] offset = new double[offsetTable.getItems().size()][];
for(int row = 0; row < offsetTable.getItems().size(); row++) {
ObservableList cells =(ObservableList) offsetTable.getItems().get(row);
offset[row] = new double[cells.size()];
for(int column = 0; column < cells.size(); column++) {
offset[row][column]= Double.parseDouble(cells.get(column).toString());
}
}
请注意,您的TableView
似乎设置不正确。您永远不要使用原始类型(ObservableList
),而且我也看不出有理由使TableView
本身的行可观察。另外,要填充数组,您需要将表中的值转换为String
,然后将String
解析为双精度数,这充其量是效率极低但容易出错的事情。
因此,您可能应该使用TableView<ObservableList>
之类的东西,而不是TableView<List<Double>>
,以便您可以这样做
double[][] offset = new double[offsetTable.getItems().size()][];
for(int rowIndex = 0; rowIndex < offsetTable.getItems().size(); rowIndex++) {
List<Double> row = offsetTable.getItems().get(rowIndex);
offset[rowIndex] = new double[row.size()];
for(int column = 0; column < row.size(); column++) {
offset[row][column]= row.get(column);
}
}
实际上,使用此设置,甚至还不清楚是否需要转换为数组,因为您可以随时替换
offset[row][column]
使用
offsetTable.getItems().get(row).get(column)
任何时候您需要访问表中的数据。
本文链接:https://www.f2er.com/2037103.html