Использование JDK 23, JavaFX 23.0.1, JavaSE-23.
В настоящее время я изучаю разработку JavaFX, и прежде чем приступить к ней, я хочу убедиться, что приложение может на самом деле экспортируется и запускается сам по себе (Runnable JAR, который запускается, или позже конвертируется в .exe, если так лучше).
Проблема в том, что он компилируется и работает нормально только через IDE, но ломается при экспорте или компиляции другими способами. Я не знаю, что является причиной этого, поэтому сделал все возможное, чтобы объяснить, как я воспроизвожу проект, предоставить результаты отладки, вызванные проблемой, и другие подробности.
Отредактировано сообщение с попыткой улучшить качество вопросов, поэтому оно может открыться повторно.
Создание тестового проекта:
Файл > Создать > Другое > JavaFX > Проект JavaFX
Назовите любое имя, установите JRE как JavaSE-23 (ранее использовал jdk-23)
Исправьте ошибки библиотеки JavaFX. Щелкните проект правой кнопкой мыши > Путь сборки > Настроить путь сборки > Замените SDK JavaFX по умолчанию пользовательской библиотекой JavaFX 23.0.1
Ошибка компиляции: «модуль не найден: javafx.controls». Для строки 2 в src\module-info.java требуется javafx.controls;
необходим файл module-info.java. Удаление приводит к ошибке компиляции «Не удалось найти или загрузить основной класс application.Main» в IDE или множеству ошибок компиляции «x-пакет не существует» в CommandPrompt
Экспорт в виде исполняемого 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.MF в проекте\META-INF содержит следующую информацию:
При нажатии «Готово» появляется предупреждение «Пожалуйста, просмотрите». лицензии для библиотек, возможно, их нельзя перепаковать с помощью этого приложения. Также эта операция не копирует файлы сигнатур из исходных библиотек в сгенерированный файл JAR", а файл MANIFEST.MF в проекте\META-INF содержит следующую информацию ( META-INF имеет папку «подложка». тоже):
И наконец:
Проблема, скорее всего, связана с моей системой. На этот раз решил попробовать IntelliJ, в котором приложение отлично работает в IDE, но с другими методами произошло то же самое, что и в Eclipse. Оба запускаются непосредственно из того места, где хранятся исходные файлы для IntelliJ (CommandPrompt > "cd blabla/project" > "java FileWithMain.java") - ошибка об отсутствующих модулях, и экспорт проекта в собственный файл JAR - сделал то же самое, что и с Eclipse... за исключением того, что здесь не указано приложение JavaFX, поскольку оно не любит развертывание с помощью JDK.
Экспортировать как JAR:
4 прямые линии в левом верхнем углу
Файл > Структура проекта
Артефакты
JAR > «из модуля с зависимостями»
Выберите «Основной класс».
Выберите «Место назначения вывода» > «Применить» > «ОК». >
4 прямые линии в левом верхнем углу
Создать > Создать артефакты > [имя проекта]:jar > Сборка
Экспорт как приложение JavaFX
4 прямые линии в верхнем левом углу
Файл > Структура проекта
Артефакты
JavaFx Приложение > «из модуля [имя проекта]»
(в разделе «Обзор») Выберите «Вывод». пункт назначения
(в JavaFX) Выберите основной класс приложения > Применить > ОК.
Использование JDK 23, JavaFX 23.0.1, JavaSE-23. В настоящее время я изучаю разработку JavaFX, и прежде чем приступить к ней, я хочу убедиться, что приложение может на самом деле экспортируется и запускается сам по себе (Runnable JAR, который запускается, или позже конвертируется в .exe, если так лучше). Проблема в том, что он компилируется и работает нормально только через IDE, но ломается при экспорте или компиляции другими способами. Я не знаю, что является причиной этого, поэтому сделал все возможное, чтобы объяснить, как я воспроизвожу проект, предоставить результаты отладки, вызванные проблемой, и другие подробности. Отредактировано сообщение с попыткой улучшить качество вопросов, поэтому оно может открыться повторно. Создание тестового проекта:
[list] [*]Файл > Создать > Другое > JavaFX > Проект JavaFX [*]Назовите любое имя, установите JRE как JavaSE-23 (ранее использовал jdk-23) [*]Исправьте ошибки библиотеки JavaFX. Щелкните проект правой кнопкой мыши > Путь сборки > Настроить путь сборки > Замените SDK JavaFX по умолчанию пользовательской библиотекой JavaFX 23.0.1 [/list] [b]Дерево каталогов[/b]< /p> [code]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 [/code] [b]\src\application\Main.java code[/b] [code]package application;
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); } }
[/code] Запуск/компиляция проекта:
[list] [*]Компиляция через IDE < ol> Нажмите кнопку «Выполнить»: компилируется и запускается без проблем. Появится небольшое окно приложения.
[*]Компиляция через консоль [list] Скопируйте проект в другое место или используйте прямо из того места, где он хранится в IDE. Не имеет значения [*]Откройте командную строку > введите «cd [путь к проекту]\src\application» > введите «java Main.java» [*] Ошибка компиляции: «модуль не найден: javafx.controls». Для строки 2 в src\module-info.java требуется javafx.controls; [*]необходим файл module-info.java. Удаление приводит к ошибке компиляции «Не удалось найти или загрузить основной класс application.Main» в IDE или множеству ошибок компиляции «x-пакет не существует» в CommandPrompt [/list] < /li> [/list] module-info.java: [code]module [projectname] { requires javafx.controls;
opens application to javafx.graphics, javafx.fxml; } [/code] [list] [*]Экспорт в виде исполняемого JAR-файла либо «Извлечь», либо «Упаковать необходимые библиотеки» (не шаги) [list] < 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 дает ошибку «класс не объявлен в исходном файле»
[/list] Может быть полезно для решения?
[b]Экспортировать как Запускаемый файл JAR:[/b] [list] [*]Упаковка необходимых библиотек [/list] Файл MANIFEST.MF в проекте\META-INF содержит следующую информацию: [code]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: . [/code] [list] [*]Извлечение необходимых библиотек [/list] При нажатии «Готово» появляется предупреждение «Пожалуйста, просмотрите». лицензии для библиотек, возможно, их нельзя перепаковать с помощью этого приложения. Также эта операция не копирует файлы сигнатур из исходных библиотек в сгенерированный файл JAR", а файл MANIFEST.MF в проекте\META-INF содержит следующую информацию ( META-INF имеет папку «подложка». тоже): [code]Manifest-Version: 1.0 Main-Class: application.Main Class-Path: . [/code] [b]И наконец:[/b] Проблема, скорее всего, связана с моей системой. На этот раз решил попробовать IntelliJ, в котором приложение отлично работает в IDE, но с другими методами произошло то же самое, что и в Eclipse. Оба запускаются непосредственно из того места, где хранятся исходные файлы для IntelliJ (CommandPrompt > "cd blabla/project" > "java FileWithMain.java") - ошибка об отсутствующих модулях, и экспорт проекта в собственный файл JAR - сделал то же самое, что и с Eclipse... за исключением того, что здесь не указано приложение JavaFX, поскольку оно не любит развертывание с помощью JDK. [list] [*]Экспортировать как JAR:
4 прямые линии в левом верхнем углу [*]Файл > Структура проекта [*]Артефакты [*]JAR > «из модуля с зависимостями» [*]Выберите «Основной класс». [*]Выберите «Место назначения вывода» > «Применить» > «ОК». > [*]4 прямые линии в левом верхнем углу [*]Создать > Создать артефакты > [имя проекта]:jar > Сборка [/list]
[*]Экспорт как приложение JavaFX [list] 4 прямые линии в верхнем левом углу [*]Файл > Структура проекта [*]Артефакты [*]JavaFx Приложение > «из модуля [имя проекта]» [*](в разделе «Обзор») Выберите «Вывод». пункт назначения [*](в JavaFX) Выберите основной класс приложения > Применить > ОК. [*]Сборка > Сборка артефактов > [имя проекта] > Сборка [*]Ошибка «Упаковщик Java FX: невозможно собрать артефакт — fx:deploy недоступен в этом JDK». Хотя это может быть и что-то индивидуальное [/list]