[英]JavaFx call super method after super initialization
我有一個實現Initializable的類。
public abstract class ExampleClass implements Initializable {
public void ExampleClass() {
// Load FXML
}
@Override
public void initialize(URL location, ResourceBundle resources) {
// Initialize stuff
}
public void afterInitialize() {
// Do things that are reliant upon the FXML being loaded
}
}
然后我擴展這個抽象類:
public class ExampleSubclass extends ExampleClass {
public ExampleSubclass() {
super(/* real code has params */);
this.afterInitialize(); // Problem here
}
}
但是,當我調用afterInitialize()時,它的行為就像抽象類中的FXML尚未加載一樣。 這讓我感到困惑,因為我先調用了super()構造函數,所以我相信FXML應該已經被加載了。
我究竟做錯了什么?
提前致謝。
根據這個答案 , initialize
方法的調用不會在構造函數中發生,而是在它之后。 所以當你在子類的構造函數中調用afterInitialize
時,它實際上是在initialize
之前調用的!
簡而言之:首先調用構造函數,然后填充任何@FXML注釋字段,然后調用initialize()...
因此,當調用initialize
時,所有FXML元素都已加載,並且正如其他人建議的那樣,您可以在initialize
方法中調用afterInitialize
但如果您不想這樣做,則可以使用@PostConstruct
注釋:
public abstract class ExampleClass implements Initializable {
public void ExampleClass() {
// Load FXML
}
@Override
public void initialize(URL location, ResourceBundle resources) {
// Initialize stuff
}
@PostConstruct
public void afterInitialize() {
// Do things that are reliant upon the FXML being loaded
}
}
public class ExampleSubclass extends ExampleClass {
public ExampleSubclass() {
super(/* real code has params */);
}
@PostConstruct
@Override
public void afterInitialize() {
super.afterInitialize();
// other things
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.