のは、次のコードを考えてみましょう:私は[名前]列のセルを編集するときJavaFXのsetCellValueFactory:NullpointerExceptionが発生
package stackoverflow;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.util.StringConverter;
import java.net.URL;
import java.util.ResourceBundle;
public class TestController implements Initializable {
@FXML
private TableView<TestRow> table;
@FXML
private TableColumn<TestRow, String> myColumn;
@Override
public void initialize(URL location, ResourceBundle resources) {
table.setEditable(true);
myColumn.setCellValueFactory(data ->data.getValue().nameProperty());
myColumn.setCellFactory(factory -> new TextFieldTableCell<>(new StringConverter<String>() {
@Override public String toString(String object) {
return object;
}
@Override public String fromString(String string) {
return string;
}
}));
myColumn.setPrefWidth(200);
table.getItems().add(new TestRow("Name1"));
table.getItems().add(new TestRow("Name2"));
}
}
は時々私はラインmyColumn.setCellValueFactory(data->data.getValue().nameProperty());
でNullpointerException
を持って、私は、私がデバッグで入力された理由はわかりませんし、それはdata.getValue()がNULLであることを示しているので、NPE
が適用されたときには.nameProperty()
が当てはまります。問題はいつデータがnullであり、その理由は何か?私は把握しようとしていたが、単に何も見つけられなかった。デバッグで私はdata.getTableView()。getItems()を探していましたが、それはそれらが追加された2つの行を返します。 data.getValue()
(table
に含まれている既存のTestRow
インスタンスを返さなければならない理由は何ですか?
最も単純な説明は、テーブルビューに項目として 'null'が挿入されたことです。テーブルに新しい項目を追加するすべての場所をチェックして、ヌル値を追加しないことを確認できます。コードにこのような場所がたくさんある場合は、質問を編集してすべての質問を投稿できます。 – Itai