Не удается запустить приложение JavaFX на MacOS (с использованием Java 8) - PullRequest
1 голос
/ 26 июня 2019

В первый раз, используя JavaFX, я пытаюсь протестировать его с окном Hello World!.

Я использую Java 8 (обновление 211) с Eclipse на MacOS с Mojave 10.14.5.

Я работаю над этим проектом:

image eclipse

Я поместил все jar-файлы JavaFX, которые, по моему мнению, мне нужны, в путь сборки (может быть, мне не хватает некоторых 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, как вы можете видеть здесь:

image menu bar

Я знаю, что он открыт, потому что под ним есть маленькая точка, но я не вижу ни одного окна. Более того, мне не удается закрыть этот предмет «чашка кофе», не закрыв само затмение.

EDIT: Я запускаю его из IDE (Eclipse 4.9.0). используя Java 8 (211) от Oracle. Я добавил указанные библиотеки сам, если я пытаюсь удалить их, оставляя импорта в коде, я получаю эту ошибку:

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')

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Проблема решена! Проблема была с пакетом: javafx-swt.jar

В Eclipse IDE для Mac, когда программа Java ссылается на SWT, В среде IDE автоматически добавляется параметр VM -XstartOnFirstThread. В большинстве случаях, это автоматическое добавление полезно. Тем не менее, есть один случай при добавлении этой опции виртуальной машины возникает проблема, а именно с Eclipse проект для приложения SWT, который также включает один или несколько «чистых» Классы JavaFX, которые не взаимодействуют с классами SWT. "Чистый" Приложение JavaFX, которое запускается из такого проекта Eclipse, будет зависать, потому что он не ожидает -XstartOnFirstThread. (https://docs.oracle.com/javafx/2/swt_interoperability/jfxpub-swt_interoperability.htm)

Во вкладке «Запустить конфигурации» на вкладке «Аргументы» вы можете найти флажок, чтобы запретить использование -XstartOnFirstThread. Сняв флажок, он работает.

0 голосов
/ 27 июня 2019

Ваша конфигурация не будет работать таким образом.Вы не даете достаточно подробностей, чтобы дать вам окончательный ответ, но вот некоторые проблемы:

Java8 от Oracle (для Mac) уже включает JavaFX, поэтому добавленные вами библиотеки либо просто не нужны, либо, что ещевероятно, сбивают с толку виртуальную машину.

Если ваша Java является OpenJDK 8, которая не включает в себя JavaFX, то добавленные вами библиотеки также бесполезны, так как выглядят как библиотеки для Java 11 или новее и не совместимы сJava 8.

Посмотрите здесь, чтобы найти правильную настройку для вашей среды: https://openjfx.io/openjfx-docs/

Добавьте эти две строки кода в ваш основной метод, чтобы узнать, какая версия 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...