Thắc mắc về Java FX
Cho mình hỏi vì sao mình không thể set controller trước lệnh Parent roor = … vậy .! ( Vì mình thấy nó cx không liên quan lắm mà chạy cứ bị NuLL Pointer). Mình cảm ơn
Show cho bọn tớ file HomeScene.fxml được không? Trong đó nên có khai báo HomeSceneController. Nếu cậu không có khai báo ở đó, cậu sẽ nhận được null ở dòng 39, và NPE ở dòng 40.
Vấn đề không phải ở đoạn Parent root
mà nằm ở fxmlLoader.load()
. Khi bạn khai báo new FXMLLoader(...)
thì nội dung từ tập tin fxml chưa được nạp lên, giao diện chỉ là 1 vùng rỗng (null), bạn phải gọi đến load
để nạp giao diện lên và giá trị trả về là khung ngoài cùng bao tất cả (parent).
Nói cho đúng thì trước khi gọi đến load
thì root
đang bằng null
.
FXMLLoader fxmlLoader = new FXMLLoader(...);
Parent p;
p = (Parent)fxmlLoader.getRoot();
print(p); // null
fxmlLoader.load(); // p = (Parent)fxmlLoader.load();
p = (Parent)fxmlLoader.getRoot();
print(p); // non-null object
https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/FXMLLoader.html#load--
à mình có để fx:controller đó r . Tại đoạn kia mình chưa hiểu lắm thôi ( Tại mình thấy cái lệnh controller vs cái root nó k thao tác với nhau mấy ).
à ok mình hiểu r. Cảm ơn bạn nhé!