Развертывание JavaFX: не удалось запустить JVM

Привет

I have deployed a simple JavaFX application using msi installer that was created by jpackage. When double-clicking on the application icon installed in Windows 10 "program files" directory, it displays an error "Failed to launch JVM". Prior to deployment, I tested the application jar file from the command prompt without any problem. When checking the application installation directory (under "C:\Program files") it has all the runtime dlls and so on, so I am not sure what causes this error? Here is the japckage command I used to build the runtime image:
jpackage  --type msi --name FileChooser -p "%JAVAFX_HOME%\lib;%M2_REPO%;org\openjfx\mavenfxfilechooser\mavenfxfilechooser.jar" --module "org.openjfx.mavenfxfilechooser/org.openjfx.mavenfxfilechooser.FileChooserApp"

Обновлять

Following the recommendation given in the comment section, I installed the JMODS on my machine and issued a jpackage command line to point to the JMODS files instead of JAVAFX_HOME as follow:
jpackage --type msi --name FileChooser -p "%JMODS_HOME%;%M2_REPO%;C:\Users\hrh74\Downloads\Lib\file\org\openjfx\mavenfxfilechooser" --module "org.openjfx.mavenfxfilechooser/org.openjfx.mavenfxfilechooser.FileChooserApp"

Я установил приложение, используя образ среды выполнения MSI, и это определенно решило проблему «Не удалось запустить JVM». Приложение запустилось, однако у меня есть компонент WebView, который должен отображать контент с https://us.yahoo.com когда пользователь нажимает кнопку Yahoo, и кажется, что это не работает, когда приложение запускается как автономное приложение, но оно работает, когда я запускаю файл jar из командной строки. Нужно ли мне что-то добавлять в jpackage?
Сообщите мне, нужны ли исходный код и файл FXML.
Спасибо


person Anthony    schedule 15.09.2020    source источник
comment
В настоящее время у меня такая же проблема, я не могу сделать запрос из развернутого приложения. как ты решил это?   -  person AngularNinjaAvenger    schedule 03.02.2021
comment
Мне так и не удалось заставить это работать, и из-за этой публикации мне запретили использовать stackoverflow, поэтому я больше не могу публиковать сообщения. Я не могу понять, как один человек в сообществе может заблокировать вас, но, по-видимому, в Stackoverflow один человек может заблокировать кого-то по прихоти   -  person Anthony    schedule 04.02.2021
comment
Спасибо, что ответил, Энтони, я думаю, мне нужно создать другое приложение ????????‍♂️   -  person AngularNinjaAvenger    schedule 05.02.2021
comment
@AngularNinjaAvenger Можете ли вы попробовать это решение и сообщить мне, работает ли оно для вас?   -  person Slaw    schedule 05.03.2021


Ответы (2)


Вы видели, как запускается приложение JavaFX после jpackage? Попробуйте скачать Gluon jmods и использовать его вместо% JAVAFX_HOME%

person domino walker    schedule 18.09.2020
comment
Не могли бы вы дать более подробную информацию в своем ответе, а не только кинуть ссылку, чтобы улучшить качество вашего ответа. - person Teasel; 18.09.2020
comment
@Domino walker: Спасибо за ссылку. Я бегло посмотрел и, похоже, это решит мою проблему. Однажды у меня будет минутка, я попробую и дам вам знать. Автор этого ответа «Slaw» кажется очень знающим, и он помог мне преодолеть проблемы в прошлом. - person Anthony; 18.09.2020
comment
что именно вам нужно сделать, так это изменить% JAVA_HOME% \ lib на путь, в который вы помещаете JMOD для JavaFX, который был загружен с сайта Gluon - person domino walker; 18.09.2020
comment
Для меня это хорошо работает для JDK 14, я думаю, что это версия JavaFX - person domino walker; 18.09.2020
comment
попробуйте добавить путь к вашим скомпилированным классам и удалить org \ openjfx \ mavenfxfilechooser \ mavenfxfilechooser.jar? - person domino walker; 18.09.2020
comment
Я удалил файл jar из пути к модулю и использовал переключатель --main-jar, чтобы указать на файл jar, который содержит классы компиляции (если я правильно вас понял), однако jpackage, похоже, не любит иметь --main-jar и --module одновременно. Какой еще вариант сообщает jpackage расположение скомпилированных классов? Спасибо - person Anthony; 18.09.2020
comment
Добавить в каталог вывода параметров пути, содержащий скомпилированные файлы .class - person domino walker; 18.09.2020
comment
Хорошо, я добавил полный путь к каталогу, содержащему скомпилированные классы и файл jar. В веб-представлении по-прежнему не отображается контент с сайта us.yahoo.com. Я добавил в свой пост раздел обновлений, чтобы показать более подробную информацию - person Anthony; 18.09.2020

Ваша первоначальная проблема связана с отсутствием собственного кода. Но, похоже, вы уже решили эту проблему, используя файлы JMOD для JavaFX, предоставленные Gluon. Итак, я постараюсь помочь решить вашу другую проблему, касающуюся https://us.yahoo.com не загружается в WebView после того, как вы создадите автономное приложение.

При попытке загрузить этот веб-сайт я столкнулся с той же проблемой, что и вы. Хотя иногда я получал сообщение о том, что мы работаем над ответом на проблемную страницу, в других случаях все приложение переставало отвечать, а в других случаях ничего не происходило (казалось, что загрузка корректно завершается). То же самое произошло и с другими веб-сайтами, не только с Yahoo. После некоторого тестирования я наконец смог получить следующую ошибку:

java.lang.Throwable: SSL handshake failed
        at javafx.web/javafx.scene.web.WebEngine$LoadWorker.describeError(Unknown Source)
        at javafx.web/javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(Unknown Source)
        at javafx.web/javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(Unknown Source)
        at javafx.web/com.sun.webkit.WebPage.fireLoadEvent(Unknown Source)
        at javafx.web/com.sun.webkit.WebPage.fwkFireLoadEvent(Unknown Source)
        at javafx.web/com.sun.webkit.network.URLLoaderBase.twkDidFail(Native Method)
        at javafx.web/com.sun.webkit.network.HTTP2Loader.notifyDidFail(Unknown Source)
        at javafx.web/com.sun.webkit.network.HTTP2Loader.lambda$didFail$18(Unknown Source)
        at javafx.web/com.sun.webkit.network.HTTP2Loader.lambda$callBackIfNotCanceled$10(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)

Это указывало на то, что в приложении, созданном jpackage, отсутствуют некоторые криптографические библиотеки. Отсюда я только догадался, но в том числе:

--add-modules jdk.crypto.cryptoki,jdk.crypto.ec

При запуске jpackage вроде решила проблему. Я не знаю, нужны ли оба модуля или нужен только один (или при добавлении одного неявно добавляется другой).


Боковое примечание: при прокрутке https://us.yahoo.com я часто получаю следующие предупреждения:

Mar 05, 2021 12:10:40 PM com.sun.javafx.webkit.prism.WCMediaPlayerImpl onError
WARNING: onError, errCode=0, msg=Could not create player!

А также:

Mar 05, 2021 12:10:41 PM com.sun.javafx.webkit.prism.WCMediaPlayerImpl$CreateThread run
WARNING: CreateThread ERROR: java.lang.UnsupportedOperationException: Unsupported protocol "data"

Я бы получил это предупреждение независимо от того, как было упаковано приложение. Я не знаю, как решить проблему, и есть ли решение без изменения самого кода JavaFX.

person Slaw    schedule 05.03.2021
comment
Ошибка «неподдерживаемые данные протокола» возникает из-за того, что источник мультимедиа (веб-сайт) возвращает мультимедиа как данные: URI. Это часть стандарта HTML5, поэтому он должен поддерживаться (и действительно поддерживается GStreamer, аудио-библиотекой нижнего уровня, используемой JavaFX WebKit). Однако реализация JavaFX (com.sun.media.jfxmediaimpl.platform.gstreamer.GSTPlatform.java) отправки мультимедиа в GStreamer ограничивает его только протоколами файлов, http и https. См. Здесь: github.com/shitapatilptc/java/blob/master/src/javafx.media/com/ - person JoeDuncan; 25.03.2021