я имею следующую проблему с программой, что я в настоящее время пишу, и я искал в Интернете, но я не мог найти что-нибудь, чтобы помочь мне понять следующую проблемуJavaFX, Лейбл пустой указатель исключение
Так внутри другого класса я написал метод, который выполняет это каждый раз, когда кнопка поиска нажата и метод выглядит следующим образом:
public void searchButton(){
try {
new SearchController().display();
} catch (IOException e) {
e.printStackTrace();
}
}
и тогда класс SearchController выглядит примерно так (я упростил его здесь):
public class SearchController {
@FXML
private Button cancelButton;
@FXML
private Label what;
private static Stage stage;
private static BorderPane borderPane;
@FXML
public void initialize(){
what.setText("Testing"); // this woks
cancelButton.setOnAction(e -> stage.close());
}
public void display() throws IOException {
stage = new Stage();
stage.setResizable(false);
stage.setTitle("Product search");
stage.initModality(Modality.APPLICATION_MODAL);
FXMLLoader loader = new FXMLLoader();
loader.setLocation(SearchController.class.getResource("Search.fxml"));
borderPane = loader.load();
Scene scene = new Scene(borderPane);
stage.setScene(scene);
//what.setText("Testing") and this doesn't work
stage.showAndWait();
}
}
Может кто-нибудь, пожалуйста, скажите мне, почему можно написать текст по методу initialize (этот метод вызывается после строки borderPane = loader.load();
... так почему это не работает, если я пытаюсь написать на ярлыке после этой строки ?)
Спасибо заранее
В качестве примечания обратите внимание, что ваши «статические» поля будут катастрофой, если вы в конечном итоге загрузите файл FXML дважды (и одновременно отобразите оба изображения). Вам это совсем не нужно, и они ждут ошибок. Вы можете использовать 'cancelButton.setOnAction (e -> cancelButton.getScene(). GetWindow(). Hide());' закрыть окно (и избавиться от поля 'stage'. Если вам действительно нужна' borderPane', поле, сделайте его переменной экземпляра и введите его из файла fxml (т. е. удалите 'static' и просто поместите' fx: id = "borderPane" на корневой элемент fxml). –