2016-12-02 91 views
1

我有一個實現了Initializable的類。超級初始化後的JavaFx調用超級方法

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應該已經被加載了。

我在做什麼錯?

在此先感謝。

+2

爲什麼ñ調用'this.afterInitialize();'initialize(..,...);'內部''只有這樣你才能成功加載FXML。你的問題很有趣。 – GOXR3PLUS

+0

通常這就是我要做的,但我需要從'ExampleSubclass'傳遞參數到'afterInitialize()'(可能應該指定在這個問題中,我的不好) – user3668541

+1

其實這裏提供的答案非常好,我din甚至不瞭解'@ PostConstruct'註釋。 – GOXR3PLUS

回答

2

根據這個answer,調用initialize方法不會發生在構造函數中,但在它之後。所以當你在子類的構造函數中調用afterInitialize時,它實際上是在initialize之前調用的!

幾句話:構造函數首先被調用,那麼任何@FXML 註釋字段填充,然後初始化()被調用......

所以當initialize被稱爲所有FXML元素已經加載和其他人則建議,可以撥打afterInitializeinitialize方法,但如果你不想做,你可以使用@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 
    } 
} 
+2

這也許有用(http://zachxu.blogspot.gr/2016/09/java-annotation-postconstruct-and.html) – GOXR3PLUS

+2

這絕對回答了我的問題,謝謝!我不知道@PostConstruct標籤,因此閱讀這些內容非常有幫助。 – user3668541

+0

我很高興它有幫助 – Omid