2015-11-12 44 views
1

我碰到了一些非常奇怪的行爲來幾次每遺忘的伎倆時間。的JavaFX的控制器負載

FXMLLoader loader = new FXMLLoader(); 
loader.setLocation(getClass().getResource("view/window.fxml")); 
Parent root = loader.load(); 
GuiController controller = loader.getController(); 

現在controller不爲空。

但是,我這樣做後...

FXMLLoader loader = new FXMLLoader(); 
loader.setLocation(getClass().getResource("view/window.fxml")); 
Parent root = loader.load(getClass().getResource("view/window.fxml")); 
GuiController controller = loader.getController(); 

controller現在null

我明白loader莫名其妙地失去位置上他的夾子?我非常感謝有人告訴我這是一種預期的行爲,並解釋了爲什麼。

請注意,是看了不少關於這個問題沒有發現任何崗位後,發現該解決方案唯一的實驗2h後,所以請不要用外觀相似的問題聯繫我。

+0

你大概的意思是'loader',不'fxmlLoader'在這兩個調用'setLocation(...)'。 –

回答

1

FXMLLoader方法load(URL)static方法。所以,你的第二個代碼塊相當於(編譯成)

FXMLLoader loader = new FXMLLoader(); 
// I assume you mean loader, not fxmlLoader, in the next line: 
loader.setLocation(getClass().getResource("view/window.fxml")); 
Parent root = FXMLLoader.load(getClass().getResource("view/window.fxml")); 
GuiController controller = loader.getController(); 

換句話說,你永遠不調用load(...)loader:因此loader從未解析FXML從不實例化控制器。

在你的第一個代碼塊,你調用無參數load()方法,它是一個實例方法。

+0

沒有注意到文檔中的'static'關鍵字。非常感謝你。 :)爲此我失去了很多我的晚上。 – ZbyszekKr

+0

由於某種原因,我的警告被壓制在這個班上......切換回來後,按照你所說的那樣進行。謝謝。 – ZbyszekKr

+0

如果您從參考中調用靜態方法,大多數IDE都會給出警告。 –