[英]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.