使用Maven的JavaFX 11抛出异常:“Windows本机运行循环线程”

sh7euo9m  于 2022-12-17  发布在  Maven
关注(0)|答案(5)|浏览(221)

我一直在使用 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)

这个问题似乎出现过一次here,但该线程中的解决方案都没有工作。
有人对如何诊断这个问题有什么建议吗?我正在Eclipse 4.9中运行,并附上了两个项目的屏幕截图,这两个项目除了一个使用maven,另一个在构建路径中添加了jar之外是完全相同的。任何帮助都非常感谢。

axr492tv

axr492tv1#

在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文件夹,还要确保上述路径中存在java 11,否则请根据系统中的java 11路径指定路径。

gfttwv5a

gfttwv5a2#

环境:Windows 10上的NetBeans IDE 8和11
我遇到了同样的问题,但我的上下文与上面的稍有不同。我在不同版本的Java之间切换做了大量的工作:支持Java 8中的遗留应用程序,以及开发Java 11中的新应用程序。
事实证明,我在尝试开发和运行Java 11应用程序时,PATH中有Java 8条目。构建成功完成,但在运行时出现大量异常。所有NB控制台日志和其他日志都指示Java 11环境。我从PATH中删除了Java条目,然后不得不重新启动NB 11。一切正常。

monwx1rj

monwx1rj3#

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

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

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

pdkcd3nj

pdkcd3nj4#

这不是Eclipse唯一的问题。我在Intellij IDEA 2018.3.2中运行OpenJFX应用程序时遇到了完全相同的问题。如果在Windows %Path% env变量中指定了任何其他Java版本,则将抛出上述异常。
例如,我使用Java 8作为默认SDK,并使用Java 11。它不是这样工作的。它只有当我从%Path%中删除Java 8 bin目录时才能工作。
这相当令人困惑(我相信这是一个bug),因为当我在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
bgibtngc

bgibtngc5#

正如@kleopatra链接的帖子中所建议的,问题在于javafx 11加载了错误的glass.dll文件。
虽然其他答案中建议的变通方法有效,但OpenJFX教程建议,如果可能,指示eclipse使用Java 11 VM运行,以便加载正确的dll。
您可以修改eclipse.ini文件并(假设jdk 11安装在C:\Program Files\Java\jdk-11.0.2中)添加以下行:

-vm
C:\Progra~1\Java\jdk-11.0.2\bin\javaw.exe

相关问题