Ошибка при запуске приложения JavaFX 2.2 с Java Web Start

Я разработал приложение JavaFX 2.2. Я упаковал и подписал JAR и написал JNLP вручную (см. Ниже).

Проблема в том, что я не могу запустить приложение с Java Web Start; например, дважды щелкнув файл .jnlp.

Я столкнулся со следующим сообщением об ошибке: Не удалось найти класс: xxxx.pamoja.client.RichClientApplication

Нет проблем при запуске приложения:

java -jar pamoja-rich-client.jar

или дважды щелкнув файл JAR.

Поэтому я знаю, что приложение работает вообще. Поэтому я думаю, что проблема связана с Java Web Start.

Я потратил много времени на поиски "googling", но не нашел никакой информации, применимой к моей проблеме.

Есть ли у кого-то идея? Я благодарен за любые подсказки!

JAR выглядит следующим образом:

jar
 |- META-INF
 | |- MANIFEST.MF
 | |- PAMOJA.RSA
 | |- PAMOJA.SF
 |
 |- com
 |- javafx
 | |- main
 | |- Main.class
 | |- NoJavaFXFallback.class
 |
 |- xxxxx
 |- pamoja
 |- client
 |- RichClientApplication.class
 |- main.css
 |- main.fxml
 |- ...

Манифест (до подписания):

Manifest-Version: 1.0
JavaFX-Version: 2.2
JavaFX-Application-Class: xxxx.pamoja.client.RichClientApplication
JavaFX-Fallback-Class: com.javafx.main.NoJavaFXFallback
Main-Class: com.javafx.main.Main

JNLP:

<!--?xml version="1.0" encoding="UTF-8"?-->
<jnlp spec="1.0+" href="pamoja-rich-client.jnlp">
<information>
 <title>Pamoja Rich Client</title>
 <vendor>kKdH</vendor>
 
 </information>
<resources>
 <j2se version="1.7+" href="http://java.sun.com/products/autodl/j2se">
 </j2se></resources>
<security>
 </security>
</jnlp>

Java:

java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode, sharing)

UPDATE

Я добавил атрибут codebase следующим образом:

И JavaFX как ресурс:

<resources os="Windows">
 </resources>

Сообщение об ошибке Не удается найти класс: xxxx.pamoja.client.RichClientApplication исчез. Но теперь он выдает следующее исключение NullPointerException:

java.lang.NullPointerException
at com.javafx.main.Main.getAppArguments(Main.java:506)
at com.javafx.main.Main.main(Main.java:860)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
4 ответа

Я решил свою проблему! Необходимы две вещи:

  • атрибут codebase.

  • jfx: javafx-desc >, чтобы указать класс, который реализует класс приложения JavaFX. Java Web Start может запускать приложение JavaFX напрямую без специального класса "Launcher".

Последний JNLP:

<!--?xml version="1.0" encoding="UTF-8"?-->
<jnlp spec="1.0+" href="pamoja-rich-client.jnlp" codebase="http://localhost:8080/">
 <information>
 <title>Pamoja Rich Client</title>
 <vendor>kKdH</vendor>
 
 <icon href="icon.png">
 </icon></information>
 <resources>
 <j2se version="1.7+" href="http://java.sun.com/products/autodl/j2se">
 <jar href="pamoja-rich-client.jar">
 </jar></j2se></resources>
 <security>
 <all-permissions>
 </all-permissions></security>
 <application-desc name="Pamoja Rich Client">
 <jfx:javafx-desc main-class="xxxx.pamoja.client.RichClientApplication" name="RichClientApplication">
 </jfx:javafx-desc></application-desc></jnlp>

Я не знаю, работает ли он вообще, не указывая время исполнения JavaFX как ресурса. Возможно, это не удается с более старой версией Java.


Недопустимый ваш JNLP файл. Взгляните на ссылку Oracle для формата файла JNLP: Синтаксис файла JNLP

Ошибка, которую я могу определить прямо, - это отсутствующий атрибут codebase в тэге JNLP.


Ваш jnlp выглядит неправильно. И вам нужно добавить ссылку на JavaFX - например, для Windows:

<resources os="Windows">
 </resources>


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

licensed under cc by-sa 3.0 with attribution.