当前位置: 首页 > 知识库问答 >
问题:

加载JavaFX FXML文件只需1秒

公西俊民
2023-03-14

我正在用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(根据我的知识,您只能通过流从JAR加载资源,但FXMLLoader不接受流,所以我被困住了。)

共有1个答案

尹昀
2023-03-14

首先,可以将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文件放在resources下面,只需调用:

FXMLLoader.load(getClass().getResource("yourfile.fxml"));
 类似资料:
  • 本文向大家介绍requirejs按需加载angularjs文件实例,包括了requirejs按需加载angularjs文件实例的使用技巧和注意事项,需要的朋友参考一下 之前分享了一篇用ocLazyLoad实现按需加载angular js文件的博客.本来当时想会使用一种方法就行了.可最近刚好有时间,在网上查找了一下requirejs实现angular js文件按需加载的资料.方案如下: 项目的主结构

  • 我想在我的iOS应用程序中显示指定时间间隔的插屏广告。此外,我不想打扰用户交互。当用户尝试从屏幕/其他操作导航时,我想显示此插屏广告。 但是,我在iOS中没有看到任何方法/调用会在需要时加载InterstitalAD。此外,iOS 7中也不推荐使用InterstitalAdobj presentFromViewController。 我的问题是,只有在需要时才能显示/呈现插屏广告的另一种方式是什么

  • 我正在使用日食赫利俄斯,专家2.0.4 嗯,我用这句话导入了一个Maven WebProject到eclipse:< br > mvn org . Apache . Maven . plugins:Maven-eclipse-plugin:2.6:eclipse-Dwtpversion = 2.0 该项目有一个log4j.properties文件在"src/test/Resources"和另一个"

  • 我的Glassfish-Web应用程序有一个奇怪的问题。 大多数时候,我的index.jsp站点加载得非常快。但有时(特别是在更新应用程序的新版本之后),我会在GlassFish中得到一堆TimeOutExceptions。 在Chrome developer控制台中,所有JavaScript文件都处于“挂起”状态,但是.jsp和.css文件加载得非常快。大约1分钟后(有时1.5分钟),大多数Ja

  • 主要内容:本节引言:,1.普通单线程下载文件:,2.普通多线程下载:,3.使用DownloadManager更新应用并覆盖安装:,4.参考代码下载:,本节小结:本节引言: 又是一个深坑,初学者慎入...本节将从普通的单线程下载 -> 普通多线程下载 -> -> 以及一个很实用的例子:利用Android那只DownloadManager更新apk 并覆盖安装的实现代码!好的,这样看上去,本节还是蛮有趣的,开始本节内容! PS:我们把整个完整的多线程断点续传放到下一节中! 1.普通单线程下载文件:

  • 本文向大家介绍AngulerJS学习之按需动态加载文件,包括了AngulerJS学习之按需动态加载文件的使用技巧和注意事项,需要的朋友参考一下 在此之前我们首先要先了解几个东西: $q 简介: $q:主要解决的是异步编程的问题,是指描述通过一个承诺行为与对象代表的异步执行的行动结果的交互,可能会也可能不会再任何时候完成。 我们通过一个小故事理解 $q 服务。 中午点外买,打电话要了份炒饭,要求送到