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

如何使用Java11启动JavaFX应用程序?

曹鹏海
2023-03-14

比方说我安装了OracleJDK11(只是为了让事情更简单)。然后我下载了Gluon的JavaFX11,并在JDK上解包。实际上,我在哪里解包JavaFX并不重要(因为我的下一个目标是基于OpenJRE制作我自己的JRE安装程序)。然后我尝试启动应用程序:

c:\Program Files\MyApp>"c:\Program Files\Java\jre-11\bin\java" 
                              --module-path="c:\Program Files\Java\jre-11\lib" 
                              --add-modules=javafx.controls 
                              --add-modules=javafx.base -jar ./MyApp.jar

我得到了这个:

启动层初始化过程中发生错误java.lang.LayerInstantiation异常:包jdk.internal.jrtfs在模块java.base和模块jrt.fs

如果我试图删除“jrs.fs”,那么我的应用程序就会崩溃,因为与类装入器相关的一些重要系统类丢失了。用Java11启动JavaFX应用程序的正确方法是什么?现在我是否需要在每次应用程序中都重新发布JavaFX(因为现在必须在启动应用程序的命令行中指定它的位置)。

共有1个答案

张晔
2023-03-14

我发现,当从Java8转换到Java11时,您可以在Maven下添加OpenJfx作为依赖项(假设您使用的是Maven)。如

<dependency>
  <groupId>org.openjfx</groupId>
  <artifactId>javafx-controls</artifactId>
  <version>11.0.1-ea+1</version>
</dependency> etc

然后你就可以跑了

java  -cp .;.\lib --module-path .\lib;. --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.swing -jar MyApp.jar

其中Java11位于Path中,所有Maven依赖项(模块化或其他)都位于lib子目录中。必须将模块依赖项添加到add模块列表中。

我随后发现,如果将模块放在另一个目录中,例如javafx模块(加上add模块中的任何内容),问题就会少一些

java  -cp .;.\lib --module-path .\modules;. --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.swing -jar MyApp.jar
 类似资料:
  • 在迈向Java11的过程中,我正在检查我的工具包,其中包括SceneBuilder。 我将java-11与javafx-sdk-11结合使用,并使用 谢谢,卡斯滕

  • 我有一个用Java 8编译的可执行jar文件,其中包含一个名为< code>app.jar的JavaFX应用程序。 当我安装了Java8时,我可以简单地用运行它。 现在我只安装了Java 11,运行上面的命令会产生以下错误: 因为Java 11不再包含JavaFX。 所以我考虑安装JavaFX。openjfx.org以两种形式提供JavaFx:SDK和JMOD文件。 我认为我不需要SDK,因为我不

  • 我遵循了https://blog.jetbrains.com/idea/2013/03/packaging-javafx-2-applications-in-intellij-idea-121/中的步骤 但是当我尝试构建工件时,在最后一步中,我得到了这个错误 错误:Java FX Packager:无法生成工件-FX:Deploy在此JDK中不可用 这里有一个快速测试的hello world应用程

  • 下面是在没有fxml的情况下重新启动JavaFX应用程序的代码。 但是,我想用fxml实现这一点。 我不知道如何使用fxml应用此代码。 我的代码。 Main.java 控制器。JAVA 样品fxml 我想重新启动我的JavaFX应用程序。 我不知道如何使用fxml应用此代码。 如何使用fxml重新启动JavaFX应用程序?

  • 所以我使用IntelliJ,并使用JavaFX构建了我的应用程序。但当我开始我的主要工作时: 我得到以下错误,我不知道这些错误来自哪里。。。在我切换github上的分支并重新设置所有配置之前,一切都很正常。。。 我得到的错误:

  • 问题内容: 我正在尝试从JavaFx应用程序内部启动JavaFx应用程序,但是看起来Application.launch()只能被调用一次。这是否意味着我必须像exec(“ java …”中那样启动一个单独的JVM …还是还有另一种方法? 更多背景信息。我希望我的JavaFx应用程序能够构建和运行JavaFx应用程序。现在,它可以在内存中编译类,装入类…真的很不​​幸,不得不诉诸一切将文件写入文件