簡體   English   中英

通過Maven的OpenJDK 11 + OpenJFX 11無法在Eclipse 2018-09 + Java 11修補程序中運行

[英]OpenJDK 11 + OpenJFX 11 via maven fails to run inside Eclipse 2018-09 + Java 11 Patch

我目前正在將我的一些項目從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應用程序時遇到問題一樣,我偶然發現了這個線程: Maven和Eclipse的行為不同,無法啟動JavaFX 11應用程序,所以我的Entry主類和JavaFX擴展Application類彼此分離,只有一個調用另一個來啟動該應用程序。

當我通過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依賴項下出現)。

我發現的只是該線程,但是我無法為它的問題真正創建解決方案:com.sun.glass.ui.win.WinApplication.staticScreen_getScreens中的NoSuchMethodError:<init>

提前致謝

好的,我從系統中卸載了所有Java實例和Eclipse。 重新安裝了eclipse,它現在看起來像是一種魅力。 可能是環境問題導致Eclipse隨隨便便的本機庫一起啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM