Как запустить приложение JavaFX 11 вне IDE? - PullRequest
2 голосов
/ 12 апреля 2019

Я скачал:
- OpenJDK 11.0.2
- JavaFX SDK 11.0.2
Оба файла извлечены по пути C:/Program Files/Java/

ОС: Windows 10
IDE:NetBeans 10.0

Пути:

JAVA_HOME = C:/Program Files/Java/jdk-11.0.2  
PATH_TO_FX = C:/Program Files/Java/javafx-sdk-11.0.2/lib

Внутренняя системная переменная Path add %JAVA_HOME%/bin

В NetBeans я создал проект приложения Java с именем JFXDev, который содержит один пакет com.Внутри com-пакета находится один основной класс со следующим кодом:

package com;

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 Main extends Application {

        @Override
        public void start(Stage primaryStage) {
            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);

            Scene scene = new Scene(root, 300, 250);

            primaryStage.setTitle("Hello World!");
            primaryStage.setScene(scene);
            primaryStage.show();
        }

        public static void main(String[] args) {
            launch(args);
        }

}

Свойства проектов изменены:
1) Библиотеки -> Путь к Modulepath добавлен C: / Program Files / Java / javafx-sdk-11.0.2 / lib
2) Библиотеки -> добавленный путь к классам C: / Program Files / Java / javafx-sdk-11.0.2 / lib / javafx.controls.jar
3) Выполнить -> Параметры виртуальной машины: добавлено--add-modules = javafx.controls, javafx.fxml

Когда я запускаю приложение с NetBeans, оно работает отлично, но я не смог запустить приложение из папки dist.Я попробовал следующие команды в cmd:

  1. Команда: java -jar JFXDev.jar

    • Ответ: Error: could not find or load main class com.Main
  2. Команда: java --module-path '%PATH_TO_FX% --add-modules=javafx.comntrols JFXDev

    • Ответ: Error: Could not find or load main class Files/Java/javafx-sdk-11.0.2/lib
  3. Команда: java --module-path %PATH_TO_FX% --add-modules=javafx.comntrols Main

    • Ответ: Error: Could not find or load main class Files/Java/javafx-sdk-11.0.2/lib
  4. Команда: java --module-path %PATH_TO_FX% --add-modules=javafx.comntrols com.Main

    • Ответ: Error: Could not find or load main class Files/Java/javafx-sdk-11.0.2/lib
  5. Команда: java --module-path "C:/Program Files/Java/javafx-sdk-11.0.2/lib/" --add-modules=javafx.comntrols com.Main
    • Ответ: Error: Could not find or load main class Main

Позже я добавил module-info.java файл:

module JFXDev {  
    requires javafx.controls;  
    exports com;  
}  

Но это не имеет никакого значения.
Что я делаю неправильно, какой-либо совет или предложение?

Я попытался выполнить шаги из https://openjfx.io/openjfx-docs/#install-javafx, но я получаю ту же ошибку: /

1 Ответ

0 голосов
/ 12 апреля 2019

«Фактический» ответ

Некоторые из указанных вами ошибок указывают на проблему с пробелами в ваших аргументах (например, C:/Program Files/...).Объемный %PATH_TO_FX% с кавычками: "%PATH_TO_FX%".Тогда, как вы сказали в комментарии , правильная командная строка для вас:

java -p "%PATH_TO_FX%" --add-modules javafx.controls -jar <path-to-jar-file> 

Остаток ответа

Из информации, которую выпри условии, что трудно (по крайней мере для меня) сказать, в чем именно проблема.Вместо этого я приведу несколько примеров запуска приложения JavaFX из командной строки, как модульного, так и немодульного.

Допустим, у вас есть проект с одним классом - основным классом - с именем com.example.Main.Этот класс расширяет Application и отображает простое окно.Скажем также, что когда код является модульным, модуль выглядит следующим образом:

module app {
    requires javafx.controls;
    exports com.example to javafx.graphics;
}

И структура вашего проекта выглядит следующим образом:

\---<project-directory>
    +---out
    |   +---artifacts
    |   |       app-1.0.jar (modular or non-modular)
    |   |
    |   \---classes
    |       |   module-info.class (when modular)
    |       |
    |       \---com
    |           \---example
    |                   Main.class
    |
    \---src
        |   module-info.java (when modular)
        |
        \---com
            \---example
                    Main.java

Тогда ваша командная строка будет выглядеть так:из следующих (ориентированных на Windows):

Немодульный

Разобранный каталог

java -p "%PATH_TO_FX%" --add-modules javafx.controls -cp out\classes com.example.Main

Файл Jar

java -p "%PATH_TO_FX%" --add-modules javafx.controls -jar out\artifacts\app-1.0.jar

Примечание:Требуется атрибут Main-Class в манифесте.

Модульный

Развернутый каталог

java -p "%PATH_TO_FX%;out\classes" -m app/com.example.Main

Файл Jar

java -p "%PATH_TO_FX%;out\artifacts" -m app/com.example.Main

Или, если Jar был создан / обновлен с --main-class

java -p "%PATH_TO_FX%;out\artifacts" -m app

Примечания:

  • Выше предполагается<project-directory> является рабочим каталогом.
  • -p - сокращение для --module-path
  • -m - сокращение для --module
  • -cp - сокращение от --class-path или -classpath
...