【问题标题】:JavaFX 11 using Maven throws Exception: "WindowsNativeRunloopThread"使用 Maven 的 JavaFX 11 抛出异常:“WindowsNativeRunloopThread”
【发布时间】:2019-03-25 04:25:15
【问题描述】:

我一直在使用 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 之外,它们是相同的。非常感谢任何帮助。

【问题讨论】:

  • 如果您对两个项目使用相同的运行时会怎样?第一个项目使用名为 JavaSE-11 的运行时,第二个项目使用名为 jdk-11.0.1 的运行时。我建议在第一个项目中也使用有效的(第二个)
  • 谢谢,但它们实际上是同一个运行时,只是有两个不同的名称(无论如何都更改了它,但仍然不起作用)
  • 您说您有一个 Maven 项目,但项目结构并未反映这一点(即您的源代码没有 /src/main/java)。你还添加了一个module-info 类,你可能不需要?
  • 是的,是的。这很草率。我已经创建了正确的项目结构并更新了图片。我还从 javafx11test 中删除了一些多余的 jar 文件,以便两个项目应该完全相同。如果没有模块信息类,我无法在 Eclipse 中运行项目。

标签: java eclipse maven javafx javafx-11


【解决方案1】:

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

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

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

【讨论】:

  • 这是一个合适的解决方案,只要这个问题在 Eclipse 中没有解决。请注意,当 Eclipse VM 设置为 Oracle JDK 1.8 时,只有在 Windows 上使用 Maven 的 JavaFX 11 项目才会发生这种情况。
【解决方案2】:

这不仅仅是 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

【讨论】:

    【解决方案3】:

    正如@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
    

    【讨论】:

      【解决方案4】:

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

      在 ArtifactID 的 POM 文件中 -- javafx-maven-pluginconfiguration tag 部分添加以下行。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-07
        • 2017-07-17
        相关资源
        最近更新 更多