使用Maven的JavaFX 11引发异常:“ WindowsNativeRunloopThread”

时间:2018-10-20 14:12:13

标签: java eclipse maven javafx javafx-11

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

但是,当我从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)

here似乎已经出现了这个问题,但是该线程中的所有解决方案都没有起作用。

有人对如何诊断问题有建议吗?我正在Eclipse 4.9中运行,并附加了两个项目的屏幕快照,除了一个使用maven之外,两个项目都是相同的,而另一个使用的jar添加到了构建路径。任何帮助,不胜感激。 Two projects. javafx11mvn is a Maven project loading javafx11 dependencies from the POM file, java11test2 is a standard java project with javafx11 jars dded to build path]

4 个答案:

答案 0 :(得分:4)

此问题的解决方案是在注释中(kleopatra)。为了快速参考,您需要添加

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

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

答案 1 :(得分:3)

这不是Eclipse唯一的问题。在Intellij IDEA 2018.3.2中运行OpenJFX应用程序时,我遇到完全相同的问题。如果Windows%Path%env变量中指定了其他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

答案 2 :(得分:1)

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

虽然其他答案中建议的解决方法有效,但是OpenJFX tutorial建议在可能的情况下指示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

答案 3 :(得分:1)

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

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

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

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