Исполняемый файл .jar не работает JavaFX - Ecliipse - PullRequest
0 голосов
/ 03 февраля 2020

Версия JDK - jdk-13.0.2: добавлена ​​переменная окружения и переменная пути

Версия JFX - javafx-sdk-13.0.2: добавлена ​​переменная окружения, а также переменная пути

Версия Eclipse - 2019-12-R: установлен плагин e (fx) clipse: строитель сцены

ОС - Windows 10


Теперь внутри затмения я настроил некоторые вещи для разрешить JavaFX работать внутри IDE. Поэтому я перечислю то, что я сделал внутри конфигураций IDE:

Окно> Настройки> Java> Установленные JRE> Добавлен jdk-13.0.2 под опцией «Стандартная виртуальная машина»> Аргумент VM - путь к модулю "C: \ Program Files \ Java \ javafx-sdk-13.0.2 \ lib" --add-modules javafx.controls, javafx.f xml.

Окно > Настройки> Java> Путь сборки> Пользовательские библиотеки> Создана новая библиотека, содержащая javafx.base, javafx.controls, javafx.f xml, javafx.graphics, javafx.media, javafx.swing, javafx. web, javafx-swt .jar файлы.

Для отдельных проектов мне все еще необходимо добавить новую пользовательскую библиотеку в «путь к классам», чтобы сделать это: I: Щелкните правой кнопкой мыши папку Project> Свойства> Java Путь сборки> Библиотеки> Удалить папку JavaFX SDK по умолчанию (не содержит файлы .jar)> Добавить новую библиотеку> Библиотека пользователя> Выберите созданную библиотеку JavaFX, которая содержит файлы .jars. На этом этапе я могу отлаживать и запускать все что угодно Javafx внутри IDE.


Оба теста представляют собой базовую сборку c блока 300x300 без каких-либо других компонентов (разрушив весь проект, прежде чем пытаться это выяснить). Разница между ними только в том, что 1 содержит информацию о модуле. java (созданный модуль при создании проекта). Информация о модуле. java содержит:

module testing {
    exports application;
    requires javafx.graphics;
    requires javafx.base;
    requires javafx.controls;
    requires javafx.fxml;
    requires javafx.media;
    requires javafx.swing;
    requires javafx.swt;
    requires javafx.web;
}

Другой «Testing2» не имеет информации о модуле. java, и один не был создан, когда проект был (флажок снят). Когда я пытаюсь «экспортировать» любой из них, используя опцию Runnable Jar, затем «извлечь необходимые библиотеки в сгенерированный jar», он экспортирует со следующей ошибкой: дублирующаяся запись: module-info.class . Что сбивает с толку, потому что у «Testing2» не должно быть никаких модулей? Если я экспортирую, используя «Пакет обязательных библиотек в сгенерированный jar», то при экспорте я не получаю никакой ошибки, но сам файл .jar при нажатии открывает окно cmd примерно на 0,5 секунды, закрывает и больше ничего не делает. То же самое, если я использую отдельную папку для библиотек при экспорте. При попытке открыть из командной строки я получаю «Не удается получить доступ к Jarfile \ path \ jar.jar», а затем, если я открываю cmd от имени администратора, я получаю «Отсутствующие компоненты среды выполнения Javafx» && Я получил

`Graphics Device initialization failed for :  d3d, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
        at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:244)
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
        ... 1 more
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:567)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:61)
Caused by: java.lang.RuntimeException: No toolkit found
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)`enter code here`
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:830)

Теперь единственной вещью, которую я не смог полностью проверить в некоторых из найденных ответов, является «манифест». До сих пор у меня сложилось впечатление, что Eclipse автоматически создает его, и когда я выбираю конфигурацию запуска во время экспорта, я выбираю точку входа с моим основным классом. Я также не смог получить к нему доступ, и когда я искал, как создать его в «Затмении», буквально все отвечали: «Затмение делает это для вас автоматически» или использует 5-летнюю версию, в которой у меня есть шаги экрана, которые я просто нет в самой последней версии IDE. Если бы кто-нибудь мог дать мне некоторое представление о том, что на самом деле здесь происходит не так, я был бы очень признателен. Спасибо!

1 Ответ

0 голосов
/ 07 февраля 2020

Хорошо, я понял это (по крайней мере, для меня). Я надеюсь, что это поможет любому в будущем. Поэтому я зашел в командную строку и изменил каталог, в котором находился файл .jar, на

cd path\to\file.jar

. Для удобства я сохранил его на рабочий стол, чтобы он выглядел как cd desktop

Далее я установил путь к JavaFx

set PATH_TO_FX="path\to\JavaFX\lib"

В моем случае это выглядело как set PATH_TO_FX="C:\Program Files\Java\javafx-sdk-13.0.2\lib" Это важный шаг, если вы не установите путь, файл .jar не откроется!

Затем я добавил аргументы VM, необходимые в Eclipse для запуска javaFX (по крайней мере, с jdk13 и jfx13), который выглядел следующим образом

java -jar --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml Testing.jar

Очевидно, я и многие другие забываем, что аргументы VM не экспортировать с файлом .jar. Единственное, что вам нужно изменить с помощью приведенных выше командных строк, - это путь к папке jfx \ lib и имя файла .jar. Я показал, как выглядит мой, поэтому, если кто-то запутался, работая в командной строке, у него есть контрольная точка. Тем не менее, это по-прежнему не позволяет ему работать, дважды щелкнув файл .jar. Я работаю над решением для этого, и я редактирую это, чтобы отразить и этот метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...