复制/粘贴无法在签名的Applet中工作

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

此外,我还有其他applet使用相同的密钥文件签名,让我复制和粘贴文本。 我在互联网上搜索高低,似乎无法找到任何线索。 是什么让我拉出我的头发是似乎没有办法调试这个(控制台没有输出 – 没有抛出exception)。

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

非常感谢任何建议!

好吧,事实certificate,2011年2月发布了Java Plug-in 1.6.0_24,系统剪贴板中的复制和粘贴被视为安全漏洞并被禁用。 您可以复制并粘贴BETWEEN小程序。 但是,如果您尝试使用主剪贴板中的某些内容,则无法将其复制到其中。

因此,有一些解决方法可供选择。 您可以回滚到该插件的早期版本。 这样可行,但是未来版本的可能性仍然会保持禁用复制和粘贴,因此您永远无法升级。

另一种方法是提供自定义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

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

虽然默认情况下Ctrl-c复制不再有效,但可以为“下一代”Java插件中运行的任何applet添加function。 由于存在Java Web Start,JWS提供了沙盒复制。 JNLP API的javax.jnlp.ClipboardService ,以及自Sun 1.6.0_10以来的下一代。 插件,嵌入式applet可以使用JWS进行部署,并且可以访问JNLP API。

也可以看看

  • http://pscode.org/prop/js.html 。 直接链接到该线程中使用的测试applet。 它在沙盒小程序中提供复制function。 如果它适用于问题机器(浏览器,设置..whatever),你应该能够重做它以在签名的applet中提供(自发)粘贴。
  • 基于框架的演示。 ClipboardService ,包含源文件和构建文件。

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

…允许我粘贴到该字段中。