繁体   English   中英

JFileChooser在通过JS调用时导致AccessControlException,在通过applet调用时起作用

[英]JFileChooser causes AccessControlException when invoked through JS, works when called through applet

我正在开发一个帮助小程序来管理大文件的传输。 我们目前有一个applet来管理完整的事务,从选择包含文件的文件夹,传输它们,以及报告操作的成功和失败,但它在很多方面都非常不令人满意。 所以现在我们只需要applet的非常微妙的帮助,让用户在本地机器上找到一个文件夹并管理传输。 我们希望尽可能多的反馈和用户交互来使用基于Web的控件。 因此,您可以想象这需要在浏览器中相当广泛地使用applet和Javascript之间的桥梁。

在大多数情况下,这是相当简单的,但我发现了一个奇怪的边缘情况。 我有一个方法弹出一个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(经过数字签名)。

感谢您对此问题的任何帮助或见解。

我认为这说明了Java可以做什么以及JavaScript不能做什么。 看起来JavaScript不允许调用允许访问客户端系统的方法。 对Java代码的JavaScript访问可能仅限于未签名的applet所允许的内容。

如果这只是Java-JavaScript桥的一个限制,我无法想象任何解决方法。 它对我来说看起来像是。

如果您对applet中的整体用户体验不满意,请考虑将其移至JavaFX而不是使用JavaScript的纯浏览器界面。

查看Java FX Ensemble库,获取可以使用的UI组件列表。

在大多数现代Web浏览器中,JS应用程序只能打开“文件”对话框以响应用户操作。 因此,您可以从onclick处理程序(显然,包括Java applet中的处理程序)创建“打开文件”对话框,但不能从例如onload处理程序创建。

因此,您可能需要创建一个按钮或<a href="#"/>以供用户单击,然后在该事件处理程序内调用showFolderSelect()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM