复制/粘贴在签名Applet中不起作用



我有一个签名的 applet(它与jarsigner正确验证),由于某种原因不允许从系统剪贴板复制和粘贴到JTextField,尽管文档告诉我它应该适用于签名的applet。

此外,我还有其他小程序,它们用相同的密钥文件签名,允许我复制和粘贴文本。我在网上到处搜索,似乎找不到任何线索。让我心烦意乱的是,似乎没有办法调试这个(在控制台中没有输出-没有抛出异常)。

有没有人有任何想法,我可以调试这个找出为什么Java不喜欢这个特殊的applet?

非常感谢您的建议!

随着2011年2月Java插件1.6.0_24的发布,从系统剪贴板复制和粘贴被认为是一个安全漏洞并被禁用了。您可以在applet之间复制和粘贴。但如果你试图使用主剪贴板中的内容,它就无法复制进来。

所以有几个变通的选择。您可以回滚到插件的早期版本。这是可行的,但很可能所有未来的版本仍然会禁用复制和粘贴功能,因此您将永远无法升级。

另一种选择是提供一个自定义java安全策略文件,该文件允许再次访问系统剪贴板。

首先找到本地Java安全策略文件。该文件名为java。策略,应该在Java安装的libsecurity文件夹中。在Windows 7上,它可以在C:Program Files (x86)Javajre6libsecurity.上找到将此文件复制到您的主文件夹(例如C:UsersKyle)。将文件重命名为.java。政策(注意开头的期间)。在文本编辑器中编辑文件。找到这行文本:

// "standard" properies that can be read by anyone

在其下面添加如下行,如下所示:

// "standard" properies that can be read by anyone
permission java.awt.AWTPermission "accessClipboard";

保存文件。在测试前关闭所有打开的浏览器并确保Java没有运行。

来源:http://blogs.oracle.com/kyle/entry/copy_and_paste_in_java

除了Dennis的概述之外,请参阅OTN的1.6.0_24+中沙箱应用程序中的副本。

虽然Ctrl-c复制默认情况下不再工作,但可以为在"下一代"Java插件中运行的任何applet添加功能。自从Java Web Start存在以来,JWS就通过。JNLP API的javax.jnlp.ClipboardService, &Sun 1.6.0_10, &下一代插件,嵌入式小程序可以使用JWS部署;可以访问JNLP API。

参见

  • http://pscode.org/prop/js.html。直接链接到该线程中使用的测试applet。它在沙盒小程序中提供复制功能。如果它在问题机器(浏览器,设置…等等)上工作,你应该能够重新工作它以提供(不提示的)粘贴在签名applet中。
  • 基于帧的演示。

我不知道为什么,但我使用的JTextField对象似乎没有正确连接到关键事件(也许是因为我添加了一个FocusListener?) -但添加以下代码:

    searchTextField.addKeyListener(new java.awt.event.KeyListener() {
        public void keyPressed(KeyEvent e) {
            //System.out.println("KEY:"+e);
            if (e.getKeyCode() == 86 && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
                java.awt.datatransfer.Clipboard clipboard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard();
                java.awt.datatransfer.Transferable clipData = clipboard.getContents(clipboard);
                String s;
                try {
                    s = (String)(clipData.getTransferData(java.awt.datatransfer.DataFlavor.stringFlavor));
                } catch (Exception ex) {
                    s = ex.toString();
                }
                searchTextField.setText(s);
            }
        }
        public void keyReleased(KeyEvent e) {
        }
        public void keyTyped(KeyEvent e) {
        }
    });

…允许我粘贴到字段

  1. 备份java.policy,即(Ex: C:Program Files (x86)Javajre7libsecurity)

  2. 查找java.policy文件中的行// "standard" properies that can be read by anyone

  3. 然后修改java.policy并添加如下

// "standard" properies that can be read by anyone permission java.security.AllPermission;

最新更新