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.

3 Likes

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--

4 Likes

à 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 ).

2 Likes

à ok mình hiểu r. Cảm ơn bạn nhé!

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?