Запуск .jar с CLI - PullRequest
       152

Запуск .jar с CLI

0 голосов
/ 06 августа 2020

Я пытаюсь экспортировать работающий файл .jar, однако я столкнулся со следующими проблемами:

«Аргументы виртуальной машины не будут частью исполняемого JAR. Аргументы можно передать в командной строке при запуске. the JAR "

Я проигнорировал предупреждение и нажал fini sh, чтобы создать исполняемый файл .jar. Когда я дважды щелкаю, это не работает.

Я запустил следующий код в своей командной строке:

**java -jar C:\path\file.jar --module-path "C:\pathtofxsdk11\lib"  --add-modules javafx.controls,javafx.fxml,javafx.base,javafx.swing, javafx.graphics**

После чего я получил следующую ошибку:

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:222)
        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)
        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)

Мне нужна помощь в создании исполняемого файла Jar.

1 Ответ

0 голосов
/ 06 августа 2020

Параметры, которые вы указали в командной строке, расположены в неправильном порядке. Все, что указано после имени файла jar (или основного класса, если вы не используете параметр -jar), будет интерпретироваться как аргумент вашего Java приложения (в отличие от аргумента JVM), и передается в массив строк в методе

public static void main(String[])

в основном классе.

Таким образом, вы должны использовать

java --module-path "C:\pathtofxsdk11\lib"  --add-modules javafx.controls,javafx.fxml,javafx.base,javafx.swing,javafx.graphics -jar C:\path\file.jar

Обратите внимание, что это не означает jar файл можно использовать как «исполняемую банку», которую можно просто запустить в любой системе, поскольку среда выполнения JavaFX не включена в стандартную среду выполнения Java начиная с версии 11 и далее. Вместо этого вы можете использовать инструмент jpackage, который включен в JDK 14, для создания собственного пакета установщика. Этот пакет будет включать среду выполнения Java, которую вы можете настроить для включения JavaFX.

Вы должны сначала загрузить и распаковать модульную версию JavaFX («jmods») из здесь .

Тогда ваша команда jpackage будет выглядеть примерно так:

jpackage --module-path "C:\pathtofxmods" --add-modules javafx.controls,javafx.fxml,javafx.swing --input "C:\path" --main-jar file.jar --type exe --name MyApp --dest "C:\path\to\generated\executable"

где C:\pathtofxmods - это библиотека, которую вы распаковали на предыдущем шаге: она должна включать коллекцию файлов *.jmod. Это создаст файл .exe в C:\path\to\generated\executable, который установит приложение в системе windows. Вы можете распространять это - обратите внимание, что конечным пользователям даже не нужна JRE, так как это свяжет JRE с пакетом.

Вы также можете запустить jlink независимо, чтобы создать JRE (с JavaFX), то есть в комплекте с приложением. См. полное руководство и полную документацию инструмента .

...