3

そして、読書に時間を割くすべての人に感謝します。

WebStartSwing1.4.2_12アプリケーションをJavaWebStart1.6.0_29で起動するように作成するのに苦労しています。

シナリオは次のとおりです。

  1. すべてのトラフィックはHTTPS経由で行われます
  2. ユーザーは、アプリケーションを起動するためにWebページ上のリンクをクリックします:サーブレットで生成されたjnlpファイル
  3. Java WebStartクライアント(1.6.0_29)が起動し、アプリケーションを一気にロードします
  4. jnlp記述子でj2seバージョンが1.4.2_12に設定されているため、アプリケーションの起動にはjava webstart 1.4.2_12が使用されます(1.6.0_29によってロードされます)。
  5. Java webstart 1.4.2_12が起動に失敗し、ゴースト「javaws2」ファイルが見つからないと主張する

次のメッセージが報告されます。

CouldNotLoadArgumentException[ Could not load specified file/URL : C:\DOCUME~1\BENOIT~1.VAT\LOCALS~1\Temp\javaws2]
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

完全なスタックトレースは次のとおりです。

java.io.FileNotFoundException: C:\DOCUME~1\BENOIT~1.VAT\LOCALS~1\Temp\javaws2 (File not found)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
  • HTTPSが無効になっている場合も、同じエラーが発生します。

次の両方のHTTPヘッダーは、JNLPサーブレットによってクライアントに送信されます

。Cache-Control:empty
プラグマ:empty

これらのヘッダーは、IEがHTTPSモードでキャッシュを無効にするのを防ぐために必要です。これにより、Java WebStartがロードされたjnlpファイルを見つけることができなくなります(キャッシュされないため)。

  • Mime-typeは次のように設定されます:application / x-java-jnlp-file

  • 私が理解していないのは、java1.4.2_12がJWS1.6.0_29によってロードされたjnlpファイルを見つけられない理由です。

読んでくれてありがとう。

4

1 に答える 1

1

@Andrew:ご関心をお寄せいただきありがとうございます。

これがその問題に関する私の結論です。

一言で言えば:常にjnlpタグにhref属性を設定してください!

<jnlp spec="1.0+" codebase="htt://myhost/codebase" href="mustSetThisAbsolutelyForJWS-1.4.2_12.jnlp">
...
</jnlp>

複数のHTTPデバッグセッションは次のことを示しています。

シナリオ1:href属性は空のままで、JNLPファイルはクライアント上のJWS1.6に関連付けられています

  1. ユーザーがjnlpリンクをクリックすると、JNLPファイルがダウンロードされ、ブラウザーによってキャッシュされます。
  2. JWS 1.6.0_29が起動し、ダウンロードしたJNLPファイルを読み取ります。
  3. JWS 1.6.0_29は、すべてのJARファイルをダウンロードしてから、JWS1.4.2_12に切り替えます。
  4. JWS 1.4.2_12が起動し、明らかにJNLPファイルを順番に読み取ります。
  5. JWS 1.4.2_12は、href属性が指すJNLPファイルを取得しようとします。
  6. hrefが空であるため、JWSは「指定されたファイル/ URLを読み込めませんでした:C:\ DOCUME〜1 \ BENOIT〜1.VAT \ LOCALS〜1 \ Temp\javaws2」と報告します。(補足として、ghost javaws2はjavaws10などと呼ばれることもあります)

注意:このシナリオでJWS 1.4または1.5を使用すると、アプリケーションが起動します。この問題は、JWS1.6を使用して1.4.2_12アプリケーションを実行する場合にのみ発生します。href属性が設定されていない場合、JWS1.5および1.6は失敗しません。代わりに、JNLPをそのまま使用し、JARの更新を確認してから、アプリケーションを起動します。

シナリオ2:href属性が適切な値で設定され、JNLPファイルがクライアント上のJWS1.6に関連付けられている

  1. ユーザーがjnlpリンクをクリックすると、JNLPファイルがダウンロードされ、ブラウザーによってキャッシュされます。
  2. JWS 1.6.0_29が起動し、ダウンロードしたJNLPファイルを読み取ります。
  3. JWS 1.6.0_29は、すべてのJARファイルをダウンロードしてから、JWS1.4.2_12に切り替えます。
  4. JWS 1.4.2_12が起動し、明らかにJNLPファイルを順番に読み取ります。
  5. JWS 1.4.2_12は、href属性が指すJNLPファイルを取得しようとします。
  6. JWS 1.4.2_12は、href属性が指すJNLPをダウンロードします。
  7. JWS 1.4.2_12は、新しくダウンロードされたJNLPファイルで参照されているすべてのJNLPJARファイルをダウンロードします。
  8. JWS 1.4.2_12は、アプリケーションを正しく起動します。

それは私にとって首の大きな痛みであり、これを理解するのに何日もかかりました。これがいつか誰かを助けることを願っています。

于 2012-09-20T12:30:24.477 に答える