3

Java Web Startを使用してJava(FX)デスクトップアプリをデプロイしました。アップデートは正常に機能しますが、ダウンロードしたJNLPを手動で実行した場合にのみ、デスクトップとメニューにインストールされたショートカットからは機能しません。

これが私のJNLPです。

<?xml version="1.0" encoding="utf-8"?>
<jnlp codebase="http://192.168.1.85/deploy/" spec="1.0" xmlns:jfx="http://javafx.com" href="Companyapp.jnlp">

    <information>

        <title>Companyapp</title>
        <vendor>Media Citizens</vendor>
        <description>Companyapp Presentation Desktop</description>
        <homepage href="http://192.168.1.85/deploy/"/>

        <offline-allowed/>

        <shortcut online="false" install="true">
            <desktop />
            <menu submenu="Companyapp"/>
        </shortcut>

        <icon kind="shortcut"   href="http://192.168.1.85/deploy/icons/32x32.gif"           width="32"      height="32"     />
        <icon kind="shortcut"   href="http://192.168.1.85/deploy/icons/64x64.gif"           width="64"      height="64"     />
        <icon kind="splash"     href="http://192.168.1.85/deploy/icons/splash_screen.jpg"   width="1024"    height="768"    />
    </information>

    <update check="always" policy="always" />

    <security>
        <all-permissions/>
    </security>

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

    <resources>
        <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>

        <jar href="http://192.168.1.85/deploy/Companyapp.jar" main="true"                                   download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/async-http-client-1.7.8.jar"             size="477791"   download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/commons-codec-1.7.jar"                       size="259600"   download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/commons-io-2.4.jar"                          size="185140"   download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/commons-lang3-3.1.jar"                       size="315805"   download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/commons-logging-1.1.jar"                 size="52915"    download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/json-simple-1.1.1.jar"                       size="23737"    download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/slf4j-api-1.7.2.jar"                     size="26083"    download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/sqlite-jdbc-3.7.15-SNAPSHOT.jar"         size="3702257"  download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/ws-commons-util-1.0.2.jar"                   size="34407"    download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/xmlrpc-client-3.1.3.jar"                 size="58573"    download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/xmlrpc-common-3.1.3.jar"                 size="109131"   download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/zt-zip-1.5.jar"                              size="33059"    download="eager"    />
        <jar href="http://192.168.1.85/deploy/libs/javaws.jar"                                  size="893738"   download="eager"    />
    </resources>

    <jfx:javafx-desc  width="0" height="0" main-class="com.mediacitizens.companyapp.presentation.desktop.Main"  name="Company App" />
    <application-desc main-class="com.mediacitizens.companyapp.presentation.desktop.Main" />
</jnlp>

念のため、ショートカットをインストールするプログラムの一部を次に示します。

// install shortcuts
try
{
    IntegrationService is = null;
    try
    {
        is = (IntegrationService) ServiceManager.lookup("javax.jnlp.IntegrationService");
    }
    catch (UnavailableServiceException use)
    {
        throw new ApplicationError(use.getLocalizedMessage());
    }

    if (!is.hasDesktopShortcut())
    {
        if (!is.requestShortcut(true, true, "Companyapp"))
        {
            throw new ApplicationError("Integration failed.");
        }
    }
    else
    {
        //initialController.dialog("Shortcuts exist", "Go away!", null);
    }
}
catch (ApplicationError e)
{
    initialController.dialog("Failed to integrate a shortcut on your computer.\nCause: " + e.getLocalizedMessage(), "I understand", null);
}

アップデート1

削除<offline-allowed />してショートカットから更新しましたが、アプリケーションをオフラインで起動できません。どうやら私はできるはずですか?それは私にこのエラーを与えます:

ここに画像の説明を入力してください

公平を期すために、私は起動時にサーバーに接続しようとしますが、それはこのエラーの原因ではありません。2秒のタイムアウトがあり、次のようになります。

try
{
    isOffline = !(InetAddress.getByName(Config.domain + "." + Config.serverDomain).isReachable(2000));
}
catch (IOException e)
{
    e.printStackTrace();
}

とにかく、私のコードはエラーで参照されていないので、持っていない場合<offline-allowed />はアプリをオフラインで実行できませんか?これは本当ですか?もしそうなら、これはJWSでの展開にとって大きな問題です、私はおそらくそれを完全に捨てるでしょう...


アップデート2

私はこれにぶつかっているかもしれないと思います:http: //bugs.sun.com/bugdatabase/view_bug.do? bug_id = 7121086誰かが回避策を知っていますか?

バグではそれは言う

拡張機能として使用されるすべてのjnlpのrifを取得します。すべてを1つに混ぜることを意味します。動作するこの状態で

では、JavaFXをjarとしてJNLPにミックスする必要がありますか?

4

5 に答える 5

2

を削除せずに問題を解決できまし<offline-allowed />た。JNLP は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="6.0+" codebase="http://192.168.1.85/deploy/" href="Companyapp.jnlp">

    <information>
        <title>Companyapp</title>
        <vendor>Media Citizens</vendor>
        <description>Companyapp Presentation Desktop</description>
        <homepage href="http://192.168.1.85" />

        <shortcut online="true" install="true">
            <desktop />
            <menu submenu="Companyapp" />
        </shortcut>

        <offline-allowed />

        <icon kind="shortcut" href="http://192.168.1.85/deploy/icons/32x32.gif" width="32" height="32" />
        <icon kind="shortcut" href="http://192.168.1.85/deploy/icons/64x64.gif" width="64" height="64" />
        <icon kind="splash" href="http://192.168.1.85/deploy/icons/splash_screen.jpg" width="1024" height="768" />
    </information>

    <update check="always" policy="prompt-update" />

    <security>
        <all-permissions />
    </security>

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

    <resources>
        <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se" />

        <jar href="http://192.168.1.85/deploy/Companyapp.jar" main="true" />
        <jar href="http://192.168.1.85/deploy/libs/async-http-client-1.7.8.jar" size="477791" download="eager" />
        <jar href="http://192.168.1.85/deploy/libs/commons-codec-1.7.jar" size="259600" download="eager" />
        <jar href="http://192.168.1.85/deploy/libs/commons-io-2.4.jar" size="185140" download="eager" />
        <jar href="http://192.168.1.85/deploy/libs/commons-lang3-3.1.jar" size="315805" download="eager" />
        <jar href="http://192.168.1.85/deploy/libs/commons-logging-1.1.jar" size="52915" download="eager" />
        <jar href="http://192.168.1.85/deploy/libs/json-simple-1.1.1.jar" size="23737" download="eager" />
        <jar href="http://192.168.1.85/deploy/libs/slf4j-api-1.7.2.jar" size="26083" download="eager" />
        <jar href="http://192.168.1.85/deploy/libs/sqlite-jdbc-3.7.15-SNAPSHOT.jar" size="3702257" download="eager" />
        <jar href="http://192.168.1.85/deploy/libs/ws-commons-util-1.0.2.jar" size="34407" download="eager" />
        <jar href="http://192.168.1.85/deploy/libs/xmlrpc-client-3.1.3.jar" size="58573" download="eager" />
        <jar href="http://192.168.1.85/deploy/libs/xmlrpc-common-3.1.3.jar" size="109131" download="eager" />
        <jar href="http://192.168.1.85/deploy/libs/zt-zip-1.5.jar" size="33059" download="eager" />
        <jar href="http://192.168.1.85/deploy/libs/javaws.jar" size="893738" download="eager" />
    </resources>

    <application-desc main-class="com.mediacitizens.companyapp.presentation.desktop.Main" />
</jnlp>

サーバーが更新を正しく処理することを確認するにはmod_expires、Apache をインストールし、これ.htaccessを JNLP と JAR があるフォルダーに配置します。

DirectoryIndex index.html

AddType application/x-java-jnlp-file .jnlp
AddType application/x-java-archive .jar
AddType application/x-java-archive-diff .jardiff

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "modification"
</IfModule>
于 2013-02-22T11:55:37.547 に答える
1

<offline-allowed/>JNLP ファイルから削除します。

offline-allowed が指定されている場合、アプリケーションは Java Application Cache Viewer によってオフラインで起動でき、アプリケーションをオフラインで起動するショートカットを作成できます。

アプリケーションがオフラインで起動された場合、更新はチェックされず、API 呼び出し BasicService.isOffline() は true を返します。

また、offline-allowed 要素は、Java Web Start がアプリケーションの更新をチェックする方法も制御します。この要素が指定されていない場合 (つまり、アプリケーションをオンラインで実行する必要がある場合)、Java Web Start は、アプリケーションを起動する前に常に更新されたバージョンをチェックします。更新が見つかった場合は、新しいアプリケーションがダウンロードされて起動されます。したがって、ユーザーは常に最新バージョンのアプリケーションを実行することが保証されます。ただし、アプリケーションはオンラインで実行する必要があります。

offline-allowed が指定されている場合、Java Web Start は更新が利用可能かどうかも確認します。ただし、アプリケーションが既にダウンロードされている場合、チェックは数秒後にタイムアウトになり、キャッシュされたアプリケーションが代わりに起動されます。サーバー接続が適度に高速な場合、通常はアプリケーションの最新バージョンが実行されますが、保証はされません。ただし、アプリケーションはオフラインで実行できます。

ソース: http://docs.oracle.com/javase/1.5.0/docs/guide/javaws/developersguide/syntax.html

于 2013-02-14T13:42:49.147 に答える