当VM选项设置为一个目录时,JavaFX程序不会运行,但当设置为具有相同文件的另一个目录时,JavaFX程序运行良好

当VM选项设置为一个目录时,JavaFX程序不会运行,但当设置为具有相同文件的另一个目录时,JavaFX程序运行良好,java,intellij-idea,javafx,Java,Intellij Idea,Javafx,我有一个IntelliJ(Java11)项目,包含两个模块。一个是简单的java模块,另一个是JavaFX程序。这些都是空的,因为我正在设置用于Git的项目结构,并试图消除任何绝对文件路径 在项目的根目录下是一个lib文件夹,其中包含JavaFX的所有jar(以及其他一些JUnit的jar)。当我第一次使用这个框架时,它们是直接从我最初提取JavaFX到的文件夹复制的(在构建非Git JavaFX项目时,我仍然可以很好地使用这个文件夹) 我将这些JAR作为依赖项添加到项目中。任何使用它们的代码在

我有一个IntelliJ(Java11)项目,包含两个模块。一个是简单的java模块,另一个是JavaFX程序。这些都是空的,因为我正在设置用于Git的项目结构,并试图消除任何绝对文件路径

在项目的根目录下是一个lib文件夹,其中包含JavaFX的所有jar(以及其他一些JUnit的jar)。当我第一次使用这个框架时,它们是直接从我最初提取JavaFX到的文件夹复制的(在构建非Git JavaFX项目时,我仍然可以很好地使用这个文件夹)

我将这些JAR作为依赖项添加到项目中。任何使用它们的代码在IDE中都不会显示错误。我知道要运行JavaFX项目,我必须在运行配置中的VM选项中添加
--module path--add modules=JavaFX.controls,JavaFX.fxml
。这就是问题所在

当我使用前面提到的JavaFX原始提取位置的路径时,一切正常(即程序窗口打开):
--module path C:/Tools/JavaFX/lib/--add modules=JavaFX.controls,JavaFX.fxml

但是,当我在项目中使用包含相同文件(加上JUnit文件)的lib文件夹路径时,它不起作用(我会出现运行时错误,并且程序不会显示其窗口):
--module path C:/Users/Henry/Documents/IntelliJ/LAA\u Rotas\u 4/lib/--add modules=javafx.controls,javafx.fxml

以下是运行时输出:

"C:\Program Files\Java\jdk-11\bin\java.exe" --module-path C:/Users/Henry/Documents/IntelliJ/LAA_Rotas_4/lib/ --add-modules=javafx.controls,javafx.fxml "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.2.4\lib\idea_rt.jar=57474:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.2.4\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\out\production\Demo;C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\lib\apiguardian-api-1.0.0.jar;C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\lib\javafx-swt.jar;C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\lib\javafx.base.jar;C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\lib\javafx.controls.jar;C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\lib\javafx.fxml.jar;C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\lib\javafx.graphics.jar;C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\lib\javafx.media.jar;C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\lib\javafx.swing.jar;C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\lib\javafx.web.jar;C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\lib\junit-jupiter-api-5.3.1.jar;C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\lib\junit-platform-commons-1.3.1.jar;C:\Users\Henry\Documents\IntelliJ\LAA_Rotas_4\lib\opentest4j-1.1.1.jar net.atos.laa_rotas.demo.Main
Graphics Device initialization failed for :  d3d, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
    at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
    at java.base/java.lang.Thread.run(Thread.java:834)
Exception in thread "main" java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: No toolkit found
    at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    ... 5 more

Process finished with exit code 1
在内部,在IntelliJ的workspace.xml文件中,这些VM选项被转换为
--module path$PROJECT\u DIR$/lib/--add modules=javafx.controls,javafx.fxml
。但是,即使我在workspace.xml文件中直接将该路径设置为
C:/Users/Henry/Documents/IntelliJ/LAA\u Rotas\u 4/lib/
,然后重新加载并运行项目,也不会发生任何变化


有人知道为什么会发生这种情况,以及可以做些什么来解决它吗?

我也遇到了同样的问题,但我找到了解决方法,您只需将其添加到intelliJ VM选项中

右键单击主类,然后单击修改运行配置,然后在VMoptions中添加以下行,并确保替换目录

    --module-path
"C:\Users\your-directory\javafx-sdk-16\lib"
--add-modules
"javafx.controls,javafx.fxml"
并确保JavaFXSDK的所有文件和目录都位于lib文件夹所在的同一目录中

bin
法律

lib

JavaFXSDK for Windows包含
lib
文件夹中的JAR,以及
bin
文件夹中的本机dll库,这就是原始路径适合您的原因。@JoséPereda哇,谢谢!那么,在我的项目中包含JavaFX的推荐方法是什么?JAR的制作不是为了让程序能够跨平台运行吗?需要DLL只能将其绑定到Windows。我需要下载一个只使用JAR的不同的跨平台版本吗?没有“只使用JAR”的版本,每个平台都有一些本机库。看一看开始和不同的相关场景,并找到适合您案例的场景。