【发布时间】:2018-12-17 15:43:28
【问题描述】:
我正在使用 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 不需要流,所以我被卡住了。)
【问题讨论】:
-
请提供一个minimal reproducible example 来说明问题。
-
FXMLLoader 绝对需要流。我将 FXML 打包为大多数项目的类路径资源。见docs.oracle.com/javase/8/javafx/api/javafx/fxml/…
-
您可以通过
Class.getResource(String)以URL的形式获取资源,并且您可以通过FXMLLoader.load(InputStream)将流与FXMLLoader一起使用。除此之外,您需要提供 minimal reproducible example 来演示延迟问题,因为我无法重现该问题。无论我将 FXML 文件放在哪里,应用程序都能快速找到并加载它。
标签: java performance javafx fxml