Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Одна странная часть API свойств заключается в том, что IntegerProperty
реализует ObservableValue<Number>
, а не ObservableValue<Integer>
. Итак, несколько противоречиво, вам нужно
TableColumn<Person, Number> ageColumn = new TableColumn<Person, Number>("Age");
В стороне, и я не уверен, что это вызывает проблемы, но обычно использовать int
вместо Integer
для типа возврата для метода get и типа параметра для метода set в вашем классе модели. Они соответствуют типам для IntegerProperty.get()
и IntegerProperty.set(...)
, поэтому он просто избегает некоторого неявного автоматического (un) бокса.
вы можете использовать метод .asObject, чтобы ваш код работал, вам не нужно менять параметр TableColumn Paramater на Number
ageColumn.setCellValueFactory(cellData -> cellData.getValue().ageProperty().asObject());
idk, который лучше кода, измените параметр на Number или использовать метод asObject
Для типа String:
firstNameColumn.setCellValueFactory(cellData -> cellData.getValue().firstNameProperty());
Если вы хотите использовать IntegerProperty
или DoubleProperty
, setCellValueFactory(...)
должен иметь дополнительный asObject()
:
ageColumn.setCellValueFactory(cellData -> cellData.getValue().ageProperty().asObject());
Это необходимо из-за плохого дизайнерского решения JavaFX.