Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java11启动JavaFX应用程序?_Java_Javafx_Java 11_Javafx 11 - Fatal编程技术网

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

如何使用Java11启动JavaFX应用程序?,java,javafx,java-11,javafx-11,Java,Javafx,Java 11,Javafx 11,比方说我安装了OracleJDK11(只是为了让事情更简单)。然后我下载了Gluon的JavaFX11,并在JDK上解包。实际上,我在哪里解包JavaFX并不重要(因为我的下一个目标是基于OpenJRE制作我自己的JRE安装程序)。 然后我尝试启动应用程序: c:\Program Files\MyApp>"c:\Program Files\Java\jre-11\bin\java" --module-path="c:\Progr

比方说我安装了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.LayerInstantiationException:在模块java.base和模块jrt.fs中打包jdk.internal.jrtfs

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

我发现,当从Java 8转换到Java 11时,您可以将OpenJfx作为依赖项添加到Maven下(假设您使用的是Maven)。 乙二醇

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

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


jre-11\lib
是否包含JavaFXSDK JAR?是否还包含可能不应作为模块路径一部分的其他JAR?。您是否尝试过在一个文件夹中单独使用JavaFXSDK JAR?您检查了吗?我不确定您的问题,但是如果您已经添加了
javafx.controls
,则不需要通过
--添加模块来添加
javafx.base
javafx.controls
模块将同时拉入
javafx.base
javafx.graphics
模块。模块
jrt.fs
在哪里导致模块路径,如果不存在,则缺少哪些类?Jose,是的,它包含所有JAR。如果路径上有几个相同的模块,那么将jar移动到不同的文件夹会有什么帮助?nullpointer,jrt.fs位于modulepath中的JDK的lib文件夹中。很难说缺少了哪些类,因为它们似乎很多——类装入器就是不工作。我将花一些时间来理解所有的依赖关系。
<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
java  -cp .;.\lib --module-path .\modules;. --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.swing -jar MyApp.jar