在阅读了一堆关于资源系统的帖子之后,我还是碰到了这个帖子。
情景:
我目前正在开发一个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中的Tree命令:Pastebin //编辑结束
我的申请执行以下操作:
首先,它从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中正常工作,但一旦导出就会导致Unknown Path / NullPointer
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)与Absolute Path一起使用。一旦导出,就可以在Eclipse中运行。导出时出现未知路径/ NullPointer。
NOTE_SEARCH_LOADER.load(EntryPoint.class.getClassLoader().getResourceAsStream("1/2/3/ui/note/NoteSearch.fxml"));
使用我的Main Class中的ClassLoader,删除了第一个Slash。导出时在Eclipse,Unknown Path / NullPointer中工作。
// edit3:我做了另一个测试,将CodeController中的Code复制到了EntryPoint中。即使在导出到Jar或Applet之后,CodePoint版本的代码也能正常工作。
我想它有事情要做,如何调用Controller?
//编辑结束
我在挠头,想知道还有什么可以尝试。
// edit2:当我解压缩我的fxml时,可以在给定位置找到NullPointer导致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?
答案 0 :(得分:0)
我只是在经过几个小时的尝试之后就采用了简单的方法,只需将FXML放入与需要特定fxml的类相同的文件夹中。
所以我的结构现在看起来像这样:Pastebin
我现在再次使用。
访问资源文件NOTE_SEARCH_LOADER.load(TabsController.class.getResourceAsStream("NoteSearch.fxml"));
现在导出的Jar和Web Applet版本都可用。
真诚的Fabian95qw