JavaFX程序加载太慢

时间:2019-11-11 10:39:46

标签: javafx

当我运行JavaFX程序时,窗口的第一次出现会花费太多时间–大约700毫秒。这是一个明显的延迟。

JavaFX可以加载得更快吗?


我有

我有一个由Maven原型org.openjfx:javafx-archetype-simple:0.0.3创建的简单HelloWorld项目。我只在PSVM中添加了一个附加类,该类调用扩展Application类的类的PSVM:

public class MainLauncher {
    public static void main(String... args) {
        System.out.println("MainLauncher...");
        App.main(args);
    }
}

public class App extends Application {

    @Override
    public void start(Stage stage) {...}

    public static void main(String[] args) {
        System.out.println("App...");
        Application.launch();
    }
}

MainLauncher是创建maven-shade-plugin的uber-JAR的必要条件。

我已经使用屏幕记录(60 FPS)来检查应用程序启动需要多少时间。

当我运行java -jar app.jarjava -p ${JARS_AND_FOLDER_WITH_CLASSES} -m com.company/com.company.MainLauncher时,换句话说,当我运行MainLauncher类时,我得到:

  • 我在0毫秒运行该应用
  • 大约30-110毫秒,我看到控制台日志
  • 大约600-750毫秒,我看到窗户开始涂漆
  • + 30毫秒(窗口结束绘制)*

当我运行App类时,其行为有点不同,但是总时间是相同的。在这种情况下,稍后我会在控制台中看到日志“ App...”:

  • 我在0毫秒运行该应用
  • 大约550毫秒,我看到控制台日志
  • 大约600-750毫秒,我看到窗户开始涂漆
  • + 30毫秒(窗口结束绘制)*

*窗口绘画需要2-3帧(对于60 FPS):  1. Title bar + borders  2. Background  3. Content

1 个答案:

答案 0 :(得分:0)

使用最新版本的Java可能会加快速度。 关键是应用程序类数据共享。 Application class data sharing 这可以通过java命令的命令行参数激活。 基本上,它将所有初始化数据存储在某个位置以及何时 二次启动应用程序的整个初始化过程 可以跳过。