【问题标题】:OpenJDK 11 + OpenJFX 11 via maven fails to run inside Eclipse 2018-09 + Java 11 PatchOpenJDK 11 + OpenJFX 11 通过 maven 无法在 Eclipse 2018-09 + Java 11 补丁中运行
【发布时间】:2018-10-16 15:25:42
【问题描述】:

我目前正在将我的一些项目从 Oracle JDK8 + JavaFX8 转换为 OpenJDK11 + OpenJFX11。 目前我试图了解如何通过 maven 使用 OpenJFX11 作为库。 我以前用过maven,喜欢简单的依赖管理。

我是这样理解的,当我只是将 openjfx 添加为 pom 依赖项时,maven 会完全处理它,我不需要配置任何与 java 模块相关的东西。

这是我的 pom 的相关部分:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  [...]

  <dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.11.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.11.1</version>
    </dependency>

    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-base</artifactId>
      <version>11</version>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>11</version>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-graphics</artifactId>
      <version>11</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <source>11</source>
                <target>11</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>[My Mainclass]</mainClass>
            </configuration>
        </plugin>
    </plugins>
  </build>
</project>

如您所见,我最初希望将 Log4J2 和 BAsic JavaFX 模块作为我项目的依赖项。 因为我已经在通过 maven 启动 OpenJFX11 应用程序时遇到了问题,所以我偶然发现了这个线程: Different behaviour between Maven & Eclipse to launch a JavaFX 11 app 所以我的 Entry 主类和我的 JavaFX 扩展应用程序类相互分离,只有一个调用另一个来启动应用程序。

当我通过 maven 从命令提示符启动这个项目时

mvn compile exec:java

运行良好,弹出 JavaFX 应用程序。

我现在不能做的是在 eclipse 中创建一个启动配置,它将在 Eclipse 中启动我的应用程序,以便我可以使用 eclipse 调试器。 我尝试使用完全相同的参数创建 Maven 启动配置:

但是当我启动此配置时,它会失败并显示以下堆栈跟踪:

[WARNING] 
java.lang.NoSuchMethodError: <init>
    at com.sun.glass.ui.win.WinApplication.staticScreen_getScreens (Native Method)
    at com.sun.glass.ui.Screen.initScreens (Screen.java:412)
    at com.sun.glass.ui.Application.lambda$run$1 (Application.java:152)
    at com.sun.glass.ui.win.WinApplication._runLoop (Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3 (WinApplication.java:174)
    at java.lang.Thread.run (Thread.java:834)
[WARNING] 
java.lang.NoSuchMethodError: <init>
    at com.sun.glass.ui.win.WinApplication.staticScreen_getScreens (Native Method)
    at com.sun.glass.ui.Screen.initScreens (Screen.java:412)
    at com.sun.glass.ui.Application.lambda$run$1 (Application.java:152)
    at com.sun.glass.ui.win.WinApplication._runLoop (Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3 (WinApplication.java:174)
    at java.lang.Thread.run (Thread.java:834)
[WARNING] 
java.lang.NullPointerException
    at com.sun.prism.d3d.D3DPipeline.getAdapterOrdinal (D3DPipeline.java:205)
    at com.sun.javafx.tk.quantum.QuantumToolkit.assignScreensAdapters (QuantumToolkit.java:695)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runToolkit (QuantumToolkit.java:313)
    at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$startup$10 (QuantumToolkit.java:258)
    at com.sun.glass.ui.Application.lambda$run$1 (Application.java:153)
    at com.sun.glass.ui.win.WinApplication._runLoop (Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3 (WinApplication.java:174)
    at java.lang.Thread.run (Thread.java:834)

在我看来,这似乎是因为缺少本地库或方法,而我的项目中没有任何内容。但通常 javafx 依赖项应该会自动添加系统本机(在我的情况下是 win,它出现在 maven 依赖项下)。

我发现的只是这个线程,但我无法真正为我的问题创建解决方案: NoSuchMethodError: <init> in com.sun.glass.ui.win.WinApplication.staticScreen_getScreens

提前致谢

【问题讨论】:

  • 您使用的是哪个 Eclipse 版本?我在 2018 年 9 月(4.9),使用 Application 类或 Launcher 类,我可以在 Eclipse 中运行和调试 JavaFX 项目,作为运行/调试 Maven 构建。使用启动器,我还可以作为 Java 应用程序运行/调试。
  • “同时使用 Application 类或 Launcher 类”到底是什么意思。我正在使用版本:2018-09 (4.9.0) Build id:20180917-1800 Java 开发人员包 + 插件 e(fx)clipse 和 Java 11 补丁。对我来说,问题似乎是当我从 eclipse 中启动它时,它似乎使用了错误的本机或 jdk 库(我安装了 JDK 8 和 11),但我将 maven 安装指向 11 并且 outisde eclipse 它可以工作。 ..
  • 我的意思是你可以像往常一样设置你的主类扩展应用程序,或者你也可以做一个不扩展应用程序的启动器类,并将它设置为你的 pom 中的主类(所以你以后可以在胖罐子上运行)。无论哪种方式,从 Eclipse 来看,这两种方法都对我有用。确保您的 JDK 11 路径正确并且项目使用它。我安装了几个 JDK,这不是问题。
  • 好的,我从我的系统中卸载了所有 java 实例和 eclipse。重新安装了eclipse,现在它似乎像一个魅力一样工作。可能是环境问题导致 eclipse 使用磨损的原生库启动。

标签: java eclipse maven javafx


【解决方案1】:

好的,我从我的系统中卸载了所有 java 实例和 eclipse。重新安装了 eclipse,它现在看起来就像一个魅力。可能是环境问题导致 eclipse 使用 wearg 本机库启动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2019-04-06
    • 2021-01-27
    • 2019-03-03
    相关资源
    最近更新 更多