6

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

此外,我还有其他使用相同密钥文件签名的小程序,可以让我复制和粘贴文本。我在互联网上搜索了高低,似乎找不到任何线索。让我大吃一惊的是,似乎没有办法调试它(控制台中没有输出 - 没有抛出异常)。

有没有人对我如何调试它以找出为什么 Java 不喜欢这个特定的小程序有任何想法?

非常感谢您的任何建议!

4

4 回答 4

11

好吧,随着 2011 年 2 月 Java Plug-in 1.6.0_24 的发布,从系统剪贴板复制和粘贴被认为是一个安全漏洞并被禁用。您可以在小程序之间复制和粘贴。但是,如果您尝试使用主剪贴板中的某些内容,则无法将其复制进去。

因此,有几种解决方法可供选择。您可以回滚到插件的早期版本。这会起作用,但很可能所有未来的版本仍然会禁用复制和粘贴,所以你永远无法升级。

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

首先找到您的本地 Java 安全策略文件。该文件名为 java.policy,应位于 Java 安装的 lib\security 文件夹中。在 Windows 7 上,可以在 C:\Program Files (x86)\Java\jre6\lib\security 中找到它。将此文件复制到您的主文件夹(例如 C:\Users\Kyle)。将文件重命名为 .java.policy(注意开头的句点)。在文本编辑器中编辑文件。找到这行文本:

// "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

于 2011-12-15T00:45:43.380 回答
2

除了 Dennis 的概述,请参阅沙盒应用程序中的复制。在 OTN 的 1.6.0_24+中。

虽然 Ctrl-c 复制在默认情况下不再起作用,但可以为在“下一代”Java 插件中运行的任何小程序重新添加功能。由于 Java Web Start 存在,JWS 通过提供沙盒复制。自 Sun 1.6.0_10 以来的 JNLP APIjavax.jnlp.ClipboardService和下一代。插件,嵌入式小程序可以使用 JWS 部署并可以访问 JNLP API。

也可以看看

  • http://pscode.org/prop/js.html。直接链接到该线程中使用的测试小程序。它在沙盒小程序中提供复制功能。如果它在问题机器(浏览器,设置..whatever)上工作,您应该能够对其进行返工以在签名的小程序中提供(无提示)粘贴。
  • 基于框架的演示。ClipboardService 的,带有源文件和构建文件。
于 2011-12-15T00:55:58.910 回答
0

我不知道为什么,但我正在使用的 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) {
        }
    });

...允许我粘贴到字段中。

于 2011-12-15T20:54:07.293 回答
0
  1. 备份java.policy位于(例如C:\Program Files (x86)\Java\jre7\lib\security:)

  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;

于 2019-04-19T14:30:14.373 回答