Проекты JavaFX запускаются только в IDE и прерываются, когда CommandPrompt или Runnable JAR [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проекты JavaFX запускаются только в IDE и прерываются, когда CommandPrompt или Runnable JAR [закрыто]

Сообщение Anonymous »

Использую JDK 23, JavaFX 23.0.1, JavaSE-23.
Eclipse для проектов, но в конце концов попробовал и IntelliJ.
Сейчас я изучаю Разработка JavaFX, и прежде чем приступить к ней, я хочу убедиться, что приложение действительно может быть экспортировано и запущено само по себе (Runnable JAR, который запускается или позже конвертируется в .exe, если это необходимо). лучше).
Проблема в том, что он компилируется и работает нормально только через IDE, но ломается при экспорте или компиляции другими способами. Я не знаю, что является причиной этого, поэтому сделал все возможное, чтобы объяснить, как я воспроизвожу проект, предоставить результаты отладки, вызванные проблемой, и другие подробности.
Отредактировано сообщение с попыткой улучшить качество вопросов, поэтому оно может открыться повторно.
Создание тестового проекта:
  • Файл > Создать > Другое > JavaFX > Проект JavaFX
  • Назовите любое имя, установите JRE как JavaSE-23 (ранее использовал jdk-23)
  • Исправьте ошибки библиотеки JavaFX. Щелкните проект правой кнопкой мыши > Путь сборки > Настроить путь сборки > Замените SDK JavaFX по умолчанию пользовательской библиотекой JavaFX 23.0.1
Дерево каталогов< /p>

Код: Выделить всё

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
    < /li>
module-info.java:

Код: Выделить всё

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.MF в проекте\META-INF содержит следующую информацию:

    Код: Выделить всё

    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: .
    
    • Извлечение необходимых библиотек
    При нажатии «Готово» появляется предупреждение «Пожалуйста, просмотрите». лицензии для библиотек, возможно, их нельзя перепаковать с помощью этого приложения. Также эта операция не копирует файлы сигнатур из исходных библиотек в сгенерированный файл JAR", а файл MANIFEST.MF в проекте\META-INF содержит следующую информацию ( META-INF имеет папку «подложка». тоже):

    Код: Выделить всё

    Manifest-Version: 1.0
    Main-Class: application.Main
    Class-Path: .
    
    И наконец:
    Проблема, скорее всего, связана с моей системой. На этот раз решил попробовать IntelliJ, в котором приложение отлично работает в IDE, но с другими методами произошло то же самое, что и в Eclipse. Оба запускаются непосредственно из того места, где хранятся исходные файлы для IntelliJ (CommandPrompt > "cd blabla/project" > "java FileWithMain.java") - ошибка об отсутствующих модулях, и экспорт проекта в собственный файл JAR - сделал то же самое, что и с Eclipse... за исключением того, что здесь не указано приложение JavaFX, поскольку оно не любит развертывание с помощью JDK.
    • Экспортировать как JAR:

      4 прямые линии в левом верхнем углу
    • Файл > Структура проекта
    • Артефакты
    • JAR > «из модуля с зависимостями»
    • Выберите «Основной класс».
    • Выберите «Место назначения вывода» > «Применить» > «ОК». >
    • 4 прямые линии в левом верхнем углу
    • Создать > Создать артефакты > [имя проекта]:jar > Сборка
  • Экспорт как приложение JavaFX
    • 4 прямые линии в верхнем левом углу
    • Файл > Структура проекта
    • Артефакты
    • JavaFx Приложение > «из модуля [имя проекта]»
    • (в разделе «Обзор») Выберите «Вывод». пункт назначения
    • (в JavaFX) Выберите основной класс приложения > Применить > ОК.
    • Сборка > Сборка артефактов > [имя проекта] > Сборка
    • Ошибка «Упаковщик Java FX: невозможно собрать артефакт — fx:deploy недоступен в этом JDK». Хотя это может быть и что-то индивидуальное


Подробнее здесь: https://stackoverflow.com/questions/793 ... nnable-jar
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Runnable RemoveCallbacks, похоже, не работает, поэтому новый Runnable не запускается
    Anonymous » » в форуме Android
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Log4j2 не работает для runnable jar exported jar
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Log4j2 не работает для runnable jar exported jar
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Intellij javafx module info.java: модуль считывает пакет «javafx.fxml» как из "javafx.fxml ', так и" javafx.fxml'
    Anonymous » » в форуме JAVA
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Spring Boot runnable jar не может подключиться к базе данных, возвращает DataSource: ошибка 'url'
    Anonymous » » в форуме JAVA
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»