2013-09-25 119 views
3

我開發了JavaFX 2.2應用程序。我打包並簽署了JAR並手動編寫了JNLP(見下文)。使用Java Web Start啓動JavaFX 2.2應用程序時出錯

問題是,我無法用Java Web Start啓動應用程序;例如通過雙擊.jnlp文件。

我面臨着以下錯誤信息:無法找到類:xxxx.pamoja.client.RichClientApplication

這是沒有啓動與應用程序的問題:

java -jar pamoja-rich-client.jar 

或雙擊JAR文件。

因此,我知道該應用程序一般工作。所以我想這個問題與Java Web Start有關。

我花了很多時間「搜索」,但沒有找到任何適用於我的問題的信息。

有人想法嗎?我很感激任何提示!

的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> 
    <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

我加入了codebase屬性如下:

<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

您需要在jnlp標記中指定codebase屬性,並將其指向您從中下載jnlp文件的URL。然後用於jnlp文件中的所有相關href屬性。 – Matthias

+0

務必使用[JaNeLA](http://pscode.org/janela/)檢查JNLP。 –

回答

0

我解決了我的問題!有兩件事情是必要的:

  1. 代碼庫屬性。

  2. < jfx:javafx-desc> tag指定實現JavaFX應用程序類的類。 Java Web Start可以直接啓動JavaFX應用程序,而無需特殊的「啓動器」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文件無效。看看JNLP文件格式的Oracle參考:JNLP File Syntax

我可以直接發現的錯誤是JNLP標記中缺少的codebase屬性。

+0

根據[鏈接](http://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/deployingWithoutCodebase.html#launchWebStartApplication)我想我可以省略代碼庫。 – kKdH

+0

那麼,如果你包含那裏的jnlp就可以工作(所以Java Webstart可以從正在下載JNLP的url中猜測代碼庫。我不會相信這種機制,並且最近我有兩次遇到了麻煩。 – Matthias

+0

AFAIU'可以省略代碼庫'只適用於小程序,這肯定不是.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

相關問題