2012-02-28 1 views
3

大きなファイルの転送を管理するヘルパーアプレットで作業しています。私たちは現在、ファイルを含むフォルダの選択、転送、操作の成功と失敗のレポートから、完全なトランザクションを管理するアプレットを持っていますが、多くの点で非常に不満です。ですから、アプレットの微妙な支援によって、ローカルマシン上のフォルダを見つけて転送を管理できるようにしたいだけです。 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の設定またはこれに類するものを使用して猿を動かすことは期待できないことに注意してください。セキュリティとアクセス制御に対する唯一の頷きは、アプレットがデジタル署名されていることです。

この問題についての助力や洞察をいただき、ありがとうございます。

+0

参照[この回答](http://stackoverflow.com/a/7842706/418556)re。 'AccessController' /' doPrivileged() 'です。 –

答えて

0

これは、JavaができることとJavaScriptができないことを示していると思います。 JavaScriptは、クライアントシステムへのアクセスを許可するメソッドを呼び出すことができないようです。たぶんJavaコードへのJavaScriptアクセスは、署名のないアプレットで許可されるものに制限されています。

これがJava-JavaScriptブリッジの単なる制限である場合、私はそれを回避する方法を想像することはできません。そして、私にはそれはそうであるように見えます。

アプレット全体のユーザーエクスペリエンスに不満がある場合は、JavaScriptを備えた純粋なブラウザインターフェイスではなく、これをJavaFXに移動することを検討してください。

Java FX Ensemble galleryで、使用できるUIコンポーネントのリストを確認してください。

0

ほとんどの最新のWebブラウザでは、JSアプリケーションはユーザーアクションに応答してファイルダイアログを開くことができます。したがって、onclickハンドラ(Javaアプレット内のハンドラを含む)からファイルを開くダイアログを作成できます。 onloadハンドラ。

したがって、ユーザがクリックするためのボタンまたは<a href="#"/>を作成してから、そのイベントハンドラ内でshowFolderSelect()を呼び出してください。

関連する問題