我正在JavaFX中构建应用程序,并且正在为布局加载FXML文件。 一开始,我所有的.fxml文件都位于我的Java类路径中。
由于我是一个游戏引擎,所以我决定将所有内容都移到类路径之外,因此现在有了一个文件系统,如下所示:
Folder[javafx]
editor.fxml
program.jar
这就是我加载FXML的方式
FXMLLoader.load(new URL("file:////" + System.getProperty("jdir") + "/javafx/" + name + ".fxml"));
它看起来可能并不漂亮,但是可以工作(System.getProperty(“ jdir”)只是光盘上.jar的位置)。 Java找到了文件,但是在每个文件上,它总是花一秒钟的时间(FXML文件大小从1kb到6kb)
所以我现在遇到的问题是我的FXML加载时间太长。回到我将FXML放在类路径中时,没有延迟。
我希望有人可以帮助我消除此延迟,或者帮助我从.jar加载FXML(据我所知,您只能通过Streams从jar加载资源,但FXMLLoader不会流,所以我被卡住了。)
答案 0 :(得分:0)
首先,您可以将System.getProperty(“ jdir”)移到外面,因为这样每次加载fxml时都会调用它。
所以不是
FXMLLoader.load(new URL("file:////" + System.getProperty("jdir") + "/javafx/" + name + ".fxml"));
执行以下操作:
String jdirProp = System.getProperty("jdir");
然后在随后的所有调用中重复使用此值。
FXMLLoader.load(new URL("file:////" + jdirProp + "/javafx/" + name + ".fxml"));
但是问题是,为什么不将fxml文件放在资源下并直接调用:
FXMLLoader.load(getClass().getResource("yourfile.fxml"));
这是最快,最优雅的方法。延迟是由以下事实造成的:您的jar未由类加载器加载(因为它不在类路径上)并且资源不容易获得,因此在您可以使用jar文件内容之前会有一些延迟。