使用Java Web Start启动JavaFX2.2应用程序时出错

使用Java Web Start启动JavaFX2.2应用程序时出错,java,javafx-2,java-web-start,jnlp,Java,Javafx 2,Java Web Start,Jnlp,我开发了一个JavaFX2.2应用程序。我打包并签署了JAR,并手工编写了JNLP(见下文) 问题是,我不能用JavaWebStart启动应用程序;例如,双击.jnlp文件 我面临以下错误消息:找不到类:xxxx.pamoja.client.RichClientApplication 使用以下选项启动应用程序没有问题: java -jar pamoja-rich-client.jar 或者双击JAR文件 因此,我知道该应用程序总体上是有效的。所以我想问题与JavaWebStart有关 我花了很

我开发了一个JavaFX2.2应用程序。我打包并签署了JAR,并手工编写了JNLP(见下文)

问题是,我不能用JavaWebStart启动应用程序;例如,双击.jnlp文件

我面临以下错误消息:找不到类:xxxx.pamoja.client.RichClientApplication

使用以下选项启动应用程序没有问题:

java -jar pamoja-rich-client.jar
或者双击JAR文件

因此,我知道该应用程序总体上是有效的。所以我想问题与JavaWebStart有关

我花了很多时间“搜索”,但没有找到任何适用于我的问题的信息

有人有主意吗?谢谢你给我的任何提示

罐子看起来像这样:

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
<?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>
清单(签字前):

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
<?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>
JNLP:

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

更新

我添加了codebase属性,如下所示:

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

您的JNLP文件无效。请参阅Oracle参考资料,了解JNLP文件格式:


我可以直接发现的错误是JNLP标记中缺少
codebase
属性。

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


不要手动生成jnlp,一旦成功,您可以根据需要手动调整jnlp。

我解决了我的问题!有两件事是必要的:

  • 代码基属性

  • 标记指定实现javafx应用程序类的类。JavaWebStart可以直接启动JavaFX应用程序,而无需特殊的“启动器”主类

  • 最终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>
    
    
    Pamoja富客户端
    kKdH
    

    如果不将JavaFX运行时指定为资源,我不知道它是否可以正常工作。可能在较旧的Java版本中失败。

    您需要在jnlp标记中指定codebase属性,并将其指向下载jnlp文件的URL。然后,这将用于jnlp文件中的所有相对href属性。请确保使用检查jnlp。由于Java FX已随Java 7提供(根据jnlp,这是必需的版本),因此确实需要该资源吗?@Matthias是的,我认为这是必需的,因为默认情况下JavaFX不在类路径上。但是,Java 8不需要这样做。根据我的想法,我可以省略代码库。好吧,如果您包含如图所示的jnlp,那就可以了(这样Java Webstart就可以从下载JNLP的url中猜出代码库。我不相信这种机制,最近我有两次遇到过这种问题。AFAIU“can leave out codebase”只适用于小程序,这绝对不是。JNLP也有顺序错误的部分,需要进一步注意。