9

我一直在使用Maven测试 JavaFX 11 ,但无法让它工作。我已经安装了 Open JDK 11,如果从可下载的 .zip 添加 jar 来构建路径,一切正常。

但是,当我使用javafx 11站点中推荐的 POM 文件时,出现以下错误。

Exception in thread "WindowsNativeRunloopThread" java.lang.NoSuchMethodError: <init>
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.staticScreen_getScreens(Native Method)
    at javafx.graphics/com.sun.glass.ui.Screen.initScreens(Screen.java:412)
    at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Application.java:152)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    at java.base/java.lang.Thread.run(Thread.java:834)
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
    at javafx.graphics/com.sun.prism.d3d.D3DPipeline.getAdapterOrdinal(D3DPipeline.java:205)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.assignScreensAdapters(QuantumToolkit.java:695)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runToolkit(QuantumToolkit.java:313)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$startup$10(QuantumToolkit.java:258)
    at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Application.java:153)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    at java.base/java.lang.Thread.run(Thread.java:834)

这个问题似乎在这里出现过一次,但该线程中的解决方案都没有奏效。

有人对如何诊断问题有建议吗?我在 Eclipse 4.9 中运行,并附上了两个项目的屏幕截图,除了一个使用 maven 和另一个在构建路径中添加了 jar 之外,它们是相同的。非常感谢任何帮助。两个项目。 javafx11mvn 是一个从 POM 文件加载 javafx11 依赖项的 Maven 项目,java11test2 是一个标准的 java 项目,其中 javafx11 jar 被添加到构建路径]

4

4 回答 4

14

这个问题的解决方案在评论中(kleopatra)。为了快速参考,您需要添加

-Djava.library.path=C:/anywhere-outside-eclipse 

(我使用-Djava.library.path=C:/)对 VM 参数进行了测试。这意味着 javafx 11 可以在 Eclipse 中与 Maven 一起使用。

于 2018-10-21T09:52:49.410 回答
6

这不是 Eclipse 唯一的问题。在 Intellij IDEA 2018.3.2 中运行 OpenJFX 应用程序时,我遇到了完全相同的问题。如果在 Windows %Path% 环境变量中指定了任何其他 Java 版本,则将引发上述异常。

例如,我使用 Java 8 作为默认 SDK 并使用 Java 11。它不是那样工作的。只有当我从 %Path% 中删除 Java 8 bin 目录时它才有效。

这相当令人困惑(我相信这是一个错误),因为当我在 IDE 中启动我的项目时,我看不到与 Java 8 的任何关系:

C:\Software\Java\openjdk-11\bin\java.exe -Dmaven.multiModuleProjectDirectory=C:\Project\helloworld -Dmaven.home=C:\Software\Maven\3.6.0 -Dclassworlds.conf=C:\Software\Maven\3.6.0\bin\m2.conf "-javaagent:C:\Software\IntelliJ IDEA\CE_2018.3.2\lib\idea_rt.jar=64808:C:\Software\IntelliJ IDEA\CE_2018.3.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Software\Maven\3.6.0\boot\plexus-classworlds-2.5.2.jar org.codehaus.classworlds.Launcher -Didea.version=2018.3.2 -T 2 -DskipTests=true exec:java
于 2019-01-10T06:21:40.573 回答
4

正如@kleopatra 链接的帖子中所建议的那样,问题是 javafx11 正在加载错误的glass.dll文件。

虽然其他答案中建议的解决方法有效,但OpenJFX 教程建议在可能的情况下指示 eclipse 使用 Java 11 VM 运行,以便加载正确的 dll。

您可以修改您的eclipse.ini文件并(假设您的 jdk11 安装在 中C:\Program Files\Java\jdk-11.0.2)添加以下行:

-vm
C:\Progra~1\Java\jdk-11.0.2\bin\javaw.exe
于 2019-02-22T13:37:12.360 回答
1

在 pom.xml 文件中添加以下行为我解决了这个问题。

在 ArtifactID -- javafx-maven-plugin的 POM 文件中,在配置标记部分添加以下行。

    <options> <option>-Djava.library.path=C:\tmp</option> </options>
    <executable>C:\openjdk11\jdk-11\bin\java.exe</executable>

在对 pom.xml 文件进行更改之前,请提前创建 tmp 文件夹。还要确保 java11 存在于上述路径中。否则根据系统中的java11路径提及路径。

于 2020-06-09T17:56:45.923 回答