2013-09-25 3 views
3

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

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

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

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

java -jar pamoja-rich-client.jar 

или по дважды щелкните файл JAR.

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

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

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

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

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> 
    <description></description> 
    <icon href="icon.png"/> 
</information> 
<resources> 
    <j2se version="1.7+" href="http://java.sun.com/products/autodl/j2se"/> 
    <jar href="pamoja-rich-client.jar" download="eager" main="true"/> 
</resources> 
<security> 
    <all-permissions/> 
</security> 
<application-desc name="Pamoja Rich Client"/> 
<update check="always" policy="prompt-run"/> 
</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

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

<jnlp spec="1.0+" href="pamoja-rich-client.jnlp" codebase="http://localhost:8080/"> 

И JavaFX в качестве ресурса:

<resources os="Windows"> 
    <jfx:javafx-runtime version="2.2+" href="http://javadl.sun.com/webapps/download/GetFile/javafx-latest/windows-i586/javafx2.jnlp"/> 
</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) 
+1

Вам нужно указать атрибут codebase в тэге jnlp и указать его по URL-адресу, с которого вы загружаете файл jnlp. Затем он используется для всех относительных атрибутов href в вашем файле jnlp. – Matthias

+0

Обязательно проверьте JNLP с помощью [JaNeLA] (http://pscode.org/janela/). –

ответ

0

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

  1. кодовая атрибут.

  2. < JFX: JavaFX-убывание> тег, чтобы указать класс, который реализует класс приложений JavaFX. Java Web Start может сразу запускать приложение JavaFX без специального класса «Launcher» Main.

Окончательный 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> 
     <description></description> 
     <icon href="icon.png"/> 
    </information> 
    <resources> 
     <j2se version="1.7+" href="http://java.sun.com/products/autodl/j2se"/> 
     <jar href="pamoja-rich-client.jar"/> 
    </resources> 
    <security> 
     <all-permissions/> 
    </security> 
    <application-desc name="Pamoja Rich Client"/> 
    <jfx:javafx-desc main-class="xxxx.pamoja.client.RichClientApplication" name="RichClientApplication" /> 
    <update check="always" policy="prompt-run"/> 
</jnlp> 

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

4

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

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

+0

Согласно [link] (http://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/deployingWithoutCodebase.html#launchWebStartApplication), я думал, что могу опустить кодовую базу. – kKdH

+0

Ну, это сработает, если вы включите jnlp, как показано на нем (так что Java Webstart может угадать кодовую базу с URL-адреса, откуда он загружает JNLP. Я бы не стал доверять этому механизму, и у меня были проблемы с этим в двух случаях в последнее время – Matthias

+0

AFAIU «can leave out codebase» применим только к апплетам, что, безусловно, нет. JNLP также имеет разделы в неправильном порядке и требует дополнительного внимания. –

4

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

<resources os="Windows"> 
    <jfx:javafx-runtime version="2.2+" href="http://javadl.sun.com/webapps/download/GetFile/javafx-latest/windows-i586/javafx2.jnlp"/> 
</resources> 
+0

Действительно ли этот ресурс необходим, поскольку Java FX уже поставляется с Java 7 (и это требуемая версия в соответствии с JNLP)? – Matthias

+0

@Matthias Да, я думаю, это необходимо, потому что JavaFX по умолчанию не находится в пути к классам. Однако это не обязательно для Java 8. – assylias

Смежные вопросы