[英]JavaFX FXML File takes exactly 1 second to load
我正在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不接受流,因此我被卡住了。)
首先,您可以将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文件内容之前会有一些延迟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.