大きなファイルの転送を管理するヘルパーアプレットで作業しています。私たちは現在、ファイルを含むフォルダの選択、転送、操作の成功と失敗のレポートから、完全なトランザクションを管理するアプレットを持っていますが、多くの点で非常に不満です。ですから、アプレットの微妙な支援によって、ローカルマシン上のフォルダを見つけて転送を管理できるようにしたいだけです。 Webベースのコントロールを使用するために、できるだけフィードバックとユーザーのやりとりが必要です。あなたが想像するように、アプレットとブラウザのJavascriptとの間のブリッジをかなり広範囲に使用する必要があります。JFileChooserは、JSを介して呼び出されたときにAccessControlExceptionを発生させます。アプレットから呼び出されたときに機能します。
これはかなり簡単ですが、私は奇妙なエッジケースを発見しました。私は、JFileChooserダイアログをポップアップし、そのフォルダの内容を見て、それを報告するメソッドを持っています。 start()メソッドでJButtonを作成し、JFileChooserをポップアップするときにこれを使用しています。しかし、私はJFileChooserのすべてのコードをshowFolderSelect()というメソッドに入れて、JavascriptからJFileChooserを開くこともできます。
public void actionPerformed(ActionEvent event) {
if ("browse".equals(event.getActionCommand())) {
showFolderSelect();
}
}
をしかし、JavaScriptからこの呼び出しはしません::だからアプレット内からこの呼び出しは動作します
function selectFolder() {
var infoApplet = document.getElementById('infoApplet');
infoApplet.showFolderSelect();
}
Javascriptの呼び出しは私にOperaのコンソールに次のメッセージを取得します。
[5 October, 2003 6:26:56 AM] JavaScript - http://localhost:8080/applet-webapp/
Event thread: click
Uncaught exception: Error: java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read)
Error thrown at line 20, column 12 in selectFolder() in http://localhost:8080/applet-webapp/:
infoApplet.showFolderSelect();
called from line 1, column 0 in <anonymous function>(event) in http://localhost:8080/applet-webapp/:
selectFolder();
どのように私はこれをJavascriptから動作させることができるかに関する任意のアイデアですか?または、私はアプレットのstart()メソッドで作成されたJButtonを使用する必要がありますか?
私は、ユーザーがjava.policyの設定またはこれに類するものを使用して猿を動かすことは期待できないことに注意してください。セキュリティとアクセス制御に対する唯一の頷きは、アプレットがデジタル署名されていることです。
この問題についての助力や洞察をいただき、ありがとうございます。
参照[この回答](http://stackoverflow.com/a/7842706/418556)re。 'AccessController' /' doPrivileged() 'です。 –