JavaFX FXML文件仅需要1秒钟即可加载

时间:2018-12-17 15:43:28

标签: java performance javafx fxml

我正在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不会流,所以我被卡住了。)

1 个答案:

答案 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文件内容之前会有一些延迟。