jnlp でアプレットを実行しています。私の単一のjarファイルは署名されています。JNLP クライアントが起動されるたびに許可プロンプトを受け入れます。BasicService を取得することはできますが、URI をたどろうとすると、依然として URL アクセス許可拒否の例外がスローされます。
file:///D:\temp\test.txt
このファイルは、私が試したすべての Windows クライアント マシンに存在し、開いてもセキュリティ上の問題はありません。
この問題は、クライアントで 32 ビットまたは 64 ビットの JRE を使用している場合に発生します。サーバーは 32 ビットですが、これは無関係だと思います。クライアントとサーバーが同じホスト上にある場合、セキュリティ例外が発生しないことが唯一の手がかり (または、おそらくおかしな話) です。リモート クライアントを使用すると、例外が発生します。
コードをコンパイルするには jnlp.jar ファイルをインクルードする必要がありましたが、Java WebStart を使用して実行する場合、クライアントでは必要ないと思います。
他に何を知る必要がありますか? 他に何を試す必要がありますか?
その日の後半...
これはバグである場合とそうでない場合があります。jnlp ファイルのパラメーターに問題がある可能性がありますが、間違ったアプローチを使用していると思われます。file://
繰り返しますが、 URLを開こうとしています。
これが私が今していることです:
デスクトップ機能は、アプレットではなく、デスクトップ アプリケーションでのみ使用できると想定していました。私は間違っていました (そしてドキュメントは乏しいです - この神聖なサイトでさえ、アプレットには JNLP サービスを使用し、アプリケーションにはデスクトップを使用するように指示されている唯一のリファレンスです) - 間違っています (ありがたいことに)
Desktop.isDesktopSupported()
したがって、アプレットとして埋め込まれていない WebStart を実行している限り、アプレットでデスクトップを使用できます (もちろん最初に確認済みです)。
私は誰にでも次のアプローチを提案します。
デスクトップがサポートされているかどうかを確認し、それを使用してください。
Desktop.getDesktop().open(file);
そうでない場合は、基本的な JNLP サービスを取得できるかどうかを確認してください。
BasicService bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService");
それが利用可能な場合は、それを使用します
boolean openedOK = bs.showDocument(url);
最後に、アプレット API に頼ります。
AppletContext context = applet.getAppletContext();
context.showDocument(url, targetFrame);