簡體   English   中英

JavaFX FXML文件加載僅需1秒

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM