我一直在使用 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添加到了构建路径。任何帮助,不胜感激。
答案 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路径提及该路径。