Как правильно запускать файлы .exe (преобразованные из .jar) с помощью пользовательских образов среды выполнения Java (созданных с помощью Jlink)?

Прежде чем погрузиться в основную часть, позвольте мне подытожить, где я сейчас нахожусь. Я сделал простую программу на Java, скомпилированную с помощью JDK 16 в NetBeans (проект Ant). Я построил его с необходимой информацией о модулях внутри файла module-info.class. Затем я создал свой собственный образ среды выполнения (JRE) из созданного файла jar с помощью jlink. Затем я преобразовал файл jar в exe с помощью Launch4J.

Чтобы запустить файл jar, я могу просто использовать эту команду: /location of custom JRE/bin/java -jar filename.jar. А как насчет exe-файла, который я создал из файла jar?

После некоторых экспериментов я выяснил, что эта же команда /location of custom JRE/bin/java -jar filename.exe работает и для exe-файла. Но правильный ли это путь?

У меня есть сомнения, потому что то, что я запускаю, не является банкой, но я все еще использую атрибут -jar. И я также попытался запустить программу exe без атрибута -jar и получил следующие ошибки:

Error: Could not find or load main class D:\Fida\Codeblocks\Java\MultipleClass.exe
Caused by: java.lang.ClassNotFoundException: D:\Fida\Codeblocks\Java\MultipleClass.exe

Может быть способ даже без использования каких-либо java-команд. Вы можете запустить его, просто дважды щелкнув исполняемый файл. Но, к сожалению, java-программа не может сама обнаруживать пользовательские образы среды выполнения. Он обнаруживает только JRE или JDK, установленные с помощью установщика. Если бы был способ установить пользовательские образы среды выполнения, я мог бы запустить исполняемый файл, просто дважды щелкнув его. Какие-либо предложения?

Спасибо!

С уважением,

Фида


person Programmer Hobbyist    schedule 20.06.2021    source источник
comment
Поскольку вы используете Java 16, альтернативой Launch4J (вероятно, менее функциональной) является jpackage. Не говорю, что вы должны или даже должны переключиться, просто подумал, что упомяну об этом.   -  person Slaw    schedule 20.06.2021
comment
Я знаю о jpackage. Если я его использую, будет ли моя исполняемая программа запускаться по двойному щелчку?   -  person Programmer Hobbyist    schedule 20.06.2021
comment
Он создает исполняемый файл, который работает как любой другой (я не знаю, почему у вас проблемы с Launch4J).   -  person Slaw    schedule 20.06.2021
comment
На самом деле, у меня нет проблем с launch4j. У меня проблемы с запуском exe с моей пользовательской JRE. Если я дважды щелкну свой исполняемый файл, он использует JDK 16 по умолчанию, установленный в моей системе. Но я хочу, чтобы он использовал мою пользовательскую JRE, когда я дважды щелкаю по ней. И причина, по которой я не использую cmd для использования своей пользовательской JRE, заключается в том, что все доступные команды в cmd предназначены для запуска jar-файлов, а не exe. В целом, я хочу, чтобы моя программа запускалась, когда я дважды щелкаю по ней, а также заставляю ее использовать мою пользовательскую JRE, а не JDK по умолчанию, установленный в моей системе.   -  person Programmer Hobbyist    schedule 20.06.2021
comment
Похоже, вы хотите встроить JRE в свое приложение, да?   -  person Slaw    schedule 20.06.2021
comment
Возможно. Как мне это сделать?   -  person Programmer Hobbyist    schedule 20.06.2021
comment
Эти два вопроса и ответа кажутся связанными: stackoverflow.com/questions/7071133 и stackoverflow.com/questions/13996547. Но я никогда не использовал Launch4J, поэтому я не знаю точных необходимых шагов. Я скажу, что, основываясь на этих вопросах и ответах, кажется, что jpackage проще в использовании; вы можете подумать о переключении инструментов, если вам не нужно что-то в Launch4J, чего jpackage не предоставляет. Но я предвзят, так как знаком с jpackage (обратите внимание, я дал ссылку на его руководство пользователя в своем первом комментарии).   -  person Slaw    schedule 20.06.2021
comment
Если у вас есть модульное программное обеспечение, вы должны запускать его с параметром -m. Параметр -jar предназначен для немодульного программного обеспечения, которое запускается с файлом jar и его зависимостями от пути к классам, а не от пути к модулю. Поскольку образ среды выполнения, созданный с помощью jlink, уже содержит ваши модули, нет смысла создавать exe-файл из jar-файла.   -  person Holger    schedule 21.06.2021
comment
См. также Как использовать launch4j с пользовательским образом среды выполнения Java? Насколько я вижу, пока ничего не изменилось.   -  person Holger    schedule 21.06.2021