В настоящее время я изучаю разработку JavaFX, и прежде чем приступить к ней, я хочу убедиться, что приложение может на самом деле экспортируется и запускается сам по себе (Runnable JAR, который запускается, или позже конвертируется в .exe, если так лучше).
Проблема в том, что он компилируется и работает нормально только через IDE, но ломается при экспорте или компиляции другими способами. Я не знаю, что является причиной этого, поэтому сделал все возможное, чтобы объяснить, как я воспроизвожу проект, предоставить результаты отладки, вызванные проблемой, и другие подробности.
Отредактировано сообщение с попыткой улучшить качество вопросов, поэтому оно может открыться повторно.
Создание тестового проекта:
- Файл > Создать > Другое > JavaFX > Проект JavaFX
- Назовите любое имя, установите JRE как JavaSE-23 (ранее использовал jdk-23)
- Исправьте ошибки библиотеки JavaFX. Щелкните проект правой кнопкой мыши > Путь сборки > Настроить путь сборки > Замените SDK JavaFX по умолчанию пользовательской библиотекой JavaFX 23.0.1
C:.
│ .classpath
│ .project
│ build.fxbuild
│
├───.settings
│ org.eclipse.core.resources.prefs
│
├───bin
│ │ module-info.class
│ │
│ └───application
│ application.css
│ Main.class
│
└───src
│ module-info.java
│
└───application
application.css
Main.java
\src\application\Main.java code
package application;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
Запуск/компиляция проекта:
- Компиляция через IDE
< ol>
Нажмите кнопку «Выполнить»: компилируется и запускается без проблем. Появится небольшое окно приложения. - Компиляция через консоль
- Скопируйте проект в другое место или используйте его прямо из того места, где он хранится в IDE. Не имеет значения
- Откройте командную строку > введите «cd [путь к проекту]\src\application» > введите «java Main.java»
- Ошибка компиляции: «модуль не найден: javafx.controls». Для строки 2 в src\module-info.java требуется javafx.controls;
- необходим файл module-info.java. Удаление приводит к ошибке компиляции «Не удалось найти или загрузить основной класс application.Main» в IDE или множеству ошибок компиляции «x-пакет не существует» в CommandPrompt
module [projectname] {
requires javafx.controls;
opens application to javafx.graphics, javafx.fxml;
}
- Экспорт в виде исполняемого JAR-файла либо «Извлечь», либо «Упаковать необходимые библиотеки» (не шаги)
< li>Нет папки src, нет файла Main.java
только файл \application\Main.class. - Открытие экспортированной папки jar с помощью двоичного файла Java(TM) Platform SE что-то загружает, но ничего Visual (возможно, из-за той же ошибки, что и компиляция через CommandPrompt)
- Компиляция Main.class в \project\application через CommandPrompt с использованием «java Main.class» выдает ошибку «не удалось найти или загрузить основной класс Main.class»< /li>
Изменение Main.class в \project\application на расширение Main.java, а затем компиляция через CommandPrompt дает ошибку «класс не объявлен в исходном файле»
Экспортировать как Запускаемый файл JAR:
- Упаковка необходимых библиотек
Manifest-Version: 1.0
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
Rsrc-Class-Path: ./ javafx.base.jar javafx.controls.jar javafx.fxml.jar
javafx.graphics.jar javafx.media.jar javafx.swing.jar javafx.web.jar ja
vafx-swt.jar
Rsrc-Main-Class: application.Main
Class-Path: .
- Извлечение необходимых библиотек
Manifest-Version: 1.0
Main-Class: application.Main
Class-Path: .
И наконец:
Командная строка в конфигурации запуска в среде IDE:
C:\Program Files\Java\jdk-23\bin\javaw.exe
-Dfile.encoding=UTF-8
-Dstdout.encoding=UTF-8
-Dstderr.encoding=UTF-8
-p "C:\Users\[user]\eclipse-workspace\testFX\bin;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.base.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.controls.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.fxml.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.graphics.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.media.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.swing.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.web.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx-swt.jar"
-XX:+ShowCodeDetailsInExceptionMessages
-m testFX/application.Main
Подробнее здесь: https://stackoverflow.com/questions/793 ... -on-export
Мобильная версия