JavaFX 11使用Maven时抛出异常:“WindowsNativeRunloopThread”

10

我一直在使用 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,另一个添加了jars到构建路径之外完全相同。非常感谢任何帮助。两个项目。javafx11mvn是从POM文件加载javafx11依赖项的Maven项目,java11test2是具有添加到构建路径的javafx11 jars的标准Java项目。]


谢谢,但它们实际上是相同的运行时,只是有两个不同的名称(已经更改了名称,但仍然无法工作)。 - Jamie Macaulay
你说你有一个Maven项目,但是项目结构并不反映出来(例如,你没有/src/main/java作为源代码目录)。而且你还添加了一个module-info类,这可能是不必要的吗? - José Pereda
是的,没错。那很不规范。我已经创建了正确的项目结构并更新了图片。我还从javafx11test中删除了一些冗余的jar文件,以便这两个项目应该完全相同。如果没有module-info类,我无法在eclipse中运行该项目。 - Jamie Macaulay
2
类似于 http://mail.openjdk.java.net/pipermail/openjfx-dev/2018-October/022713.html。 - kleopatra
谢谢。我之前没有遇到过这个问题,但是这确实是解决方案! - Jamie Macaulay
显示剩余2条评论
5个回答

14
这个问题的解决方案在评论(kleopatra)中。为了快速参考,您需要添加。
-Djava.library.path=C:/anywhere-outside-eclipse 

我在VM参数中使用-Djava.library.path=C:/进行测试。这意味着JavaFX 11可以在Eclipse内使用Maven。


1
这是一个适当的解决方案,只要在Eclipse中没有修复这个问题。请注意,这仅发生在使用Maven的JavaFX 11项目上,在Windows操作系统下,当Eclipse虚拟机设置为Oracle JDK 1.8时。 - José Pereda

6
这不仅仅是Eclipse的问题。当在Intellij IDEA 2018.3.2中运行OpenJFX应用程序时,我遇到了完全相同的问题。如果Windows的%Path%环境变量中指定了其他Java版本,则会引发上述异常。
例如,我使用Java 8作为默认SDK并尝试使用Java 11。但这种方式无法工作。只有在将Java 8 bin目录从%Path%中删除后才能正常工作。
这相当令人困惑(我认为这是一个错误),因为当我在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

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

1
在pom.xml文件中添加以下行已解决此问题。
在ArtifactID的POM文件中--javafx-maven-plugin,在configuration标签部分中添加以下行。
    <options> <option>-Djava.library.path=C:\tmp</option> </options>
    <executable>C:\openjdk11\jdk-11\bin\java.exe</executable>

在更改pom.xml文件之前,请提前创建tmp文件夹。同时确保java11已经存在于上述路径中,否则请根据您系统上java11的路径进行调整。

0

背景:Windows 10 上的 NetBeans IDE 8 和 11

我遇到了同样的问题,但我的情况与上述略有不同。我经常在各种 Java 版本之间切换工作:支持 Java 8 中的旧应用程序,并在 Java 11 中开发新应用程序。

事实证明,在尝试开发和运行 Java 11 应用程序时,我在 PATH 中有 Java 8 条目。构建成功完成,但在运行时会出现大量异常。所有 NB 控制台日志和其他日志都指示使用的是 Java 11 环境。我从 PATH 中删除了 Java 条目,然后不得不重启 NB 11。一切正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接