2016-10-19 2 views
0

У меня есть класс Launcher, который я хочу использовать для открытия нового окна.Надувание FXML из подкаталога

из основных в Launcher, я звоню:

ChatList chatList = new ChatList(communicator);

Конструктор ChatList вызывает метод showChatList(), где я пытаюсь надуть FXML документ:

private void showChatList() { 
    try { 
     FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("fxml/ChatList.fxml")); 
     Parent root = (Parent) fxmlLoader.load(); 
     Stage stage = new Stage(); 
     stage.setScene(new Scene(root)); 
     stage.show(); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
} 

Однако я получая java.lang.IllegalStateException: Location is not set., где я звоню fxmlLoader.load(). Моя файловая структура проекта выглядит следующим образом:

project structure

Я попытался положить в абсолютный путь к файлу в файле FXML, но по-прежнему не везло.

Может ли кто-нибудь помочь мне понять, что общего заключается в том, что за раздуванием FXMLs в JavaFX (с несколькими этапами) возникает общий принцип, или укажите мне хороший ресурс, с которым они столкнулись.

Cheers.

+0

Я не уверен, что это помогает, но мне нужно сделать новый FXMLLoader (getClass(). GetClassLoader(). GetResource (// path); 'Стоит попробовать. –

+0

Итак, вы говорите, что я делаю это : 'FXMLLoader fxmlLoader = новый FXMLLoader (getClass(). GetResour ce ("// fxml/ChatList.fxml")); '? Я все еще не работаю. –

ответ

1

Я знаю, что это старый вопрос, но, возможно, может помочь кому-то.

Вы должны написать весь путь к файлу fxml. В вашем случае:

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/client/fxml/ChatList.fxml")); 

Другой пример: Youproject/Src/parentpackage/childpackage/fxmlToGet.fxml

Если вы хотите, чтобы получить FXML в childpackage вы должны написать:

FXMLLoader(getClass().getResource("/parentpackage/childpackage/fxmlToGet.fxml")); 
Смежные вопросы