2017-02-20 15 views
0

После прочтения списка сообщений о системе ресурсов я все еще сталкиваюсь с этой стеной.getResource для класса и класса Loader при запуске из jar

Сценарий:

Я в настоящее время разрабатывает JavaFX applicationm, который должен работать как в банке, и как апплет. Я использую простой трюк JavaFX into Swing Applications, чтобы обернуть мое приложение в fxpanel.

Обе версии отлично работают в Eclipse.

Но теперь как банка, так и апплет запускаются в одну и ту же проблему, как только вызывается первый контроллер fx.

Моя структура пакета:

/* 
1. 
    2. 
     3. 
      controller. 
         EntryPoint.class <-- Main 
         MenuController.class 
         TabsController.class 
      ui. 
       pane. 
         MainMenu.fxml 
         Startuppane.fxml 
         Tabs.fxml 
       note. 
         NoteSearch.fxml 
         NoteView.fxml 

*/ 

// редактировать: Дерево команд из моего распакованной баночке: Pastebin // редактировать Конец

Мое приложение выполняет следующие действия:

Во-первых, он загружает RootLayout from EntryPoint.class

MainBorder = ROOTLOADER.load(EntryPoint.class.getResourceAsStream("/1/2/3/ui/pane/StartupPane.fxml")); 

А затем tw o «Дети», «Меню» и «Некоторые вкладки».

Меню прекрасно работает, потому что сам MenuController не загружает другие дочерние элементы.

Теперь актуальная проблема возникает при вызове TabsController и пытается загрузить его собственные дочерние элементы, такие как NoteView.

TP = TABSLOADER.load(EntryPoint.class.getResourceAsStream("/1/2/3/ui/pane/Tabs.fxml")); //Loading The Tabs. 

Так TabPane загружается, а когда TabsController в настоящее время пытается загрузить свою собственную Childitems. Я всегда получаю NullPointer в экспортированной банке или webapplet.

Я попытался загрузки ChildItems со следующими методами:

NOTE_SEARCH_LOADER.load(TabsController.class.getResourceAsStream("/1/2/3/ui/note/NoteSearch.fxml")); 

отлично работает в Eclipse, но как только экспортируемые причины Неизвестный путь/NullPointer

NOTE_SEARCH_LOADER.load(TabsController.class.getClassLoader().getResourceAsStream("1/2/3/ui/note/NoteSearch.fxml")); 

Использование ClassLoader вместо удален первый слэш. Работает в Eclipse, когда экспортировали причины Неизвестный путь/NullPointer

NOTE_SEARCH_LOADER.load(EntryPoint.class.getResourceAsStream("/1/2/3/ui/note/NoteSearch.fxml")); 

Использование EntryPoint.class (основной) с Абсолютной Пути. Работает в Eclipse после экспорта. Неизвестный путь/NullPointer при экспорте.

NOTE_SEARCH_LOADER.load(EntryPoint.class.getClassLoader().getResourceAsStream("1/2/3/ui/note/NoteSearch.fxml")); 

Использование ClassLoader из моего основного класса, удалено первым слэш. Работает в Eclipse, Неизвестный путь/NullPointer при экспорте.

// edit3: Я сделал еще один тест, скопировав код из TabController в EntryPoint. версия EntryPoint кода работает даже после экспорта в банку или апплета.

У меня есть что-то делать, как вызывается контроллер?

// редактировать Конец

Я почесал голову, и интересно, что еще я мог бы попробовать.

// edit2: NullPointer Causing FXML можно найти в данном местоположении, когда я распакую свой файл fxml.

// редактировать Конец

Может быть, я снова просто не хватает что-то очень очевидное.

Sinclery

Fabian95qw

Список посещенных нитей:

Get a resource using getResource()

Preferred way of loading resources in Java

URL to load resources from the classpath in Java

How to reference javafx fxml files in resource folder?

How do I use Java getResource() to get a resource from a parent directory?

Why does getResource return null

+0

Вы подтвердили, что 'NoteSearch.fxml' действительно находится в файле баночки? –

+0

Я распаковал свой Jar, чтобы убедиться, и да Файлы можно найти в данном местоположении. –

ответ

0

Я просто взял легкий маршрут после нескольких часов безуспешных попыток, просто бросая FXML в ту же папку, что и класс, который требуется, чтобы конкретный FXML.

Так что моя структура теперь выглядит следующим образом: Pastebin

И теперь я снова доступ к файлу ресурсов с.

NOTE_SEARCH_LOADER.load(TabsController.class.getResourceAsStream("NoteSearch.fxml")); 

Теперь работает как экспортированный Jar, так и версия веб-апплета.

Sincerly Fabian95qw