我正在使用幫助器小程序來管理大文件的傳輸。我們目前有一個小應用程序管理整個事務,從選擇包含文件的文件夾,傳輸它們,報告操作的成功和失敗,但在很多方面都不令人滿意。所以現在我們只需要applets的非常微妙的幫助,讓用戶在本地機器上找到一個文件夾並管理傳輸。我們希望儘可能多的反饋和用戶交互來使用基於Web的控件。因此,您可以想象這需要在瀏覽器中大量使用applet和Javascript之間的橋樑。JFileChooser在通過JS調用時導致AccessControlException,通過applet調用時工作
大多數情況下,這是相當簡單的,但我發現了一個奇怪的邊緣情況。我有一個方法彈出JFileChooser對話框,並查看該文件夾的內容並將其報告回來。當我在start()方法中創建一個JButton並使用它彈出JFileChooser時,我有這個工作。但是我將JFileChooser的所有代碼放入一個名爲showFolderSelect()的方法中,以便我也可以嘗試從Javascript中打開JFileChooser。因此,從applet中此調用的工作原理:
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?或者我只需要使用applet的start()方法中創建的JButton?
請注意,我不能指望用戶能夠使用java.policy配置或任何類似的東西。唯一可以預期的安全和訪問控制的點頭是applet(s)被數字簽名。
感謝您對此問題的任何幫助或見解。
請參閱[此答案](http://stackoverflow.com/a/7842706/418556)重新。 'AccessController' /'doPrivileged的()'。 – 2012-02-29 05:14:02