我試圖更改應(yīng)用程序中的場(chǎng)景,并且加載場(chǎng)景后需要直接更新其中一個(gè)節(jié)點(diǎn),但問題是該節(jié)點(diǎn)尚未初始化,所以我總是得到 NPE。如何強(qiáng)制初始化節(jié)點(diǎn)或等到所有節(jié)點(diǎn)都已初始化后再調(diào)用該 ndoe 的方法我從未成功嘗試調(diào)用節(jié)點(diǎn),但是如果我在事件中調(diào)用節(jié)點(diǎn)(例如按下按鈕),它似乎確實(shí)有效。package za.holmes.PAT;import java.net.URL;import java.util.ResourceBundle;import javafx.event.ActionEvent;import javafx.fxml.FXML;import javafx.fxml.FXMLLoader;import javafx.fxml.Initializable;import javafx.scene.control.Button;import javafx.scene.control.Label;import javafx.scene.control.PasswordField;import javafx.scene.control.TextField;import javafx.scene.layout.AnchorPane;public class EventHandler implements Initializable { @FXML private AnchorPane changePane; @FXML private TextField IDField; @FXML private PasswordField passField; @FXML private Label errorField; @FXML private Label nameText; private User currentUser; @Override public void initialize(URL url, ResourceBundle resourceBundle) { }// @FXML// private void initialize() {// } @FXML private void start(ActionEvent event) { ((Button) event.getSource()).setDisable(true);; System.out.println("Program started"); try { System.out.println("Connecting to database"); Class.forName("za.holmes.PAT.DataHandler"); } catch (Exception e) { e.printStackTrace(); } updateScreen("Login.fxml"); } private void updateScreen(String fileName) { try { FXMLLoader loader = new FXMLLoader(); AnchorPane pane = (AnchorPane)loader.load(Oldage.class.getResourceAsStream("/scenes/" + fileName)); changePane.getChildren().setAll(pane); } catch (Exception e) { e.printStackTrace(); } }
1 回答

慕斯王
TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
是的,只是不要使用單個(gè)控制器。使用多個(gè)控制器,而不是通過改變?cè)氐目梢娦詠砀淖兤聊?,而不是讓每個(gè)“場(chǎng)景”成為一個(gè)全新的 FXML 文件
添加回答
舉報(bào)
0/150
提交
取消