簡體   English   中英

無法在MacOS上啟動JavaFX應用程序(使用Java 8)

[英]Cannot launch a JavaFX Application on MacOS (using Java 8)

第一次使用JavaFX,我正在嘗試使用Hello World!進行測試Hello World! 窗口。

我在具有Mojave 10.14.5的MacOS上將Java 8(更新211)與Eclipse一起使用。

我正在從事這個項目:

圖像蝕

我將所有我認為需要的JavaFX jar放入了構建路徑(也許我缺少了一些jar?)。

我正在嘗試使用以下代碼使用JavaFX打開一個窗口:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Test extends Application{
    public static void main(final String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

該代碼應該很好,因為它可以在Windows和Linux上運行。

當我運行它時,下面的欄中會顯示一個Java項目:

圖像菜單欄

我知道它已打開,因為它下面有一個小點,但我看不到任何窗口。 而且,如果不關閉eclipse本身,我將無法關閉這個“咖啡”項目。

編輯:我正在從IDE(Eclipse 4.9.0)運行它。 使用Oracle的Java 8(211)。 如果我嘗試刪除引用的庫而將導入留在代碼中,則我自己添加了引用的庫,則會收到此錯誤:

Access restriction: The type 'Application' is not API (restriction on required library '/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/jfxrt.jar')

您的配置無法以這種方式工作。 您沒有提供足夠的詳細信息來給出確定的答案,但是這里有一些問題:

Oracle的Java8(適用於Mac)已經包含JavaFX,因此添加的庫要么不再需要,要么很可能使VM混亂。

如果您的Java是不包含JavaFX的OpenJDK 8,那么您添加的庫也是無用的,因為它們看起來像Java 11或更高版本的庫,並且與Java 8不兼容。

在這里查看以找到適合您的環境的正確設置: https : //openjfx.io/openjfx-docs/

將這兩行代碼添加到您的main方法中,以找出您在運行時實際使用的Java和JavaFX版本。

System.out.println("java.runtime.version: " + System.getProperty("java.runtime.version", "(undefined)"));
System.out.println("javafx.version: " + System.getProperty("javafx.version", "(undefined)"));

輸出應如下所示:

java.runtime.version: 1.8.0_212-b10
javafx.version: 8.0.212

問題解決了! 問題出在以下軟件包:javafx-swt.jar

在Mac的Eclipse IDE中,當Java程序引用SWT時,IDE會自動添加VM選項-XstartOnFirstThread。 在大多數情況下,此自動添加是有幫助的。 但是,在一種情況下,添加此VM選項會導致問題,即SWT應用程序的Eclipse項目也包含一個或多個不與SWT類互操作的“純” JavaFX類。 從這樣的Eclipse項目啟動的“純” JavaFX應用程序將掛起,因為它不希望使用-XstartOnFirstThread。 https://docs.oracle.com/javafx/2/swt_interoperability/jfxpub-swt_interoperability.htm

在“運行配置”的“參數”選項卡中,您可以找到一個復選框,要求不要使用-XstartOnFirstThread。 取消選中它即可。

暫無
暫無

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

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