2015-11-12 2 views
1

Несколько раз я сталкивался с каким-то странным поведением, забывая о трюке.Контроллер JavaFX loading

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 как-то теряет свою хватку на месте? Я очень признателен, если кто-нибудь скажет мне, что это ожидаемое поведение и объясните мне, почему.

Пожалуйста, обратите внимание, что после публикации ничего не найдено, и обнаружено решение только после 2-х экспериментов, поэтому, пожалуйста, не связывайте меня с похожими вопросами.

+0

Вы, по-видимому, подразумеваете 'loader', а не' fxmlLoader' в обоих вызовах 'setLocation (...)'. –

ответ

1

Метод FXMLLoaderload(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 и никогда не конкретизирует контроллер.

В вашем первом блоке кода вы вызываете метод no-arg load(), который является методом экземпляра.

+0

Не заметили ключевое слово 'static' в документации. Большое спасибо. :) Потерял довольно много моего вечера для этого. – ZbyszekKr

+0

По какой-то причине у меня было предупреждение, подавленное для этого класса ... После того, как они вернулись к нему, вы сделали это, как вы сказали. Благодарю. – ZbyszekKr

+0

Большинство IDE дадут вам предупреждение, если вы вызываете статический метод из ссылки. –

Смежные вопросы