【发布时间】:2017-07-09 17:46:08
【问题描述】:
在阅读了一堆关于资源系统的帖子后,我仍然遇到了这个问题。
情景:
我目前正在开发一个 javafx 应用程序,它既可以作为 jar 也可以作为 Applet 运行。 我正在使用简单的技巧 JavaFX into Swing Applications 将我的应用程序包装到 fxpanel 中。
两个版本在 Eclipse 中都能正常工作。
但是现在,一旦调用了第一个 fx 控制器,jar 和 Applet 都会遇到相同的问题。
我的包结构:
/*
1.
2.
3.
controller.
EntryPoint.class <-- Main
MenuController.class
TabsController.class
ui.
pane.
MainMenu.fxml
Startuppane.fxml
Tabs.fxml
note.
NoteSearch.fxml
NoteView.fxml
*/
//编辑:我解压后的 jar 中的树命令:Pastebin //edit End
我的应用程序执行以下操作:
首先,它从 EntryPoint.class 加载 RootLayout
MainBorder = ROOTLOADER.load(EntryPoint.class.getResourceAsStream("/1/2/3/ui/pane/StartupPane.fxml"));
然后是两个孩子、一个菜单和一些选项卡。
菜单工作正常,因为 MenuController 本身不加载任何其他子项。
现在真正的问题是在调用 TabsController 时出现,并尝试加载它自己的子项,例如 NoteView。
TP = TABSLOADER.load(EntryPoint.class.getResourceAsStream("/1/2/3/ui/pane/Tabs.fxml")); //Loading The Tabs.
所以 TabPane 被加载,当 TabsController 现在尝试加载他自己的 Childitems 时。我总是在导出的 jar 或 webapplet 中得到一个 NullPointer。
我尝试使用以下方法加载 ChildItems:
NOTE_SEARCH_LOADER.load(TabsController.class.getResourceAsStream("/1/2/3/ui/note/NoteSearch.fxml"));
在 Eclipse 中工作正常,但一旦导出会导致未知路径/空指针
NOTE_SEARCH_LOADER.load(TabsController.class.getClassLoader().getResourceAsStream("1/2/3/ui/note/NoteSearch.fxml"));
使用 ClassLoader 代替,删除第一个 Slash。在 Eclipse 中工作,一旦导出导致 Unknown path / NullPointer
NOTE_SEARCH_LOADER.load(EntryPoint.class.getResourceAsStream("/1/2/3/ui/note/NoteSearch.fxml"));
将 EntryPoint.class (main) 与绝对路径一起使用。在 Eclipse 中工作,一旦导出。导出时未知路径/NullPointer。
NOTE_SEARCH_LOADER.load(EntryPoint.class.getClassLoader().getResourceAsStream("1/2/3/ui/note/NoteSearch.fxml"));
使用我的主类中的 ClassLoader,删除第一个 Slash。在 Eclipse 中工作,导出时未知路径/NullPointer。
//edit3:我做了另一个测试,将代码从 TabController 复制到 EntryPoint。即使在导出到 Jar 或 Applet 之后,代码的 EntryPoint 版本也可以工作。
估计是有事,Controller是怎么调用的?
//编辑结束
我摸不着头脑,想知道我还能尝试什么。
//edit2:当我解压我的 fxml 时,可以在给定的位置找到导致 FXML 的 NullPointer。
//编辑结束
也许我又错过了一些非常明显的东西。
神仙
法比安95qw
访问线程列表:
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?
【问题讨论】:
-
你确认
NoteSearch.fxml真的在jar文件里了吗? -
我打开了我的罐子以确保,是的,文件可以在给定的位置找到。
标签: javafx resources classloader