逆水行舟用力撑,一篙松劲退千寻。这篇文章主要讲述复制/粘贴无法在签名的Applet中工作相关的知识,希望能为你提供帮助。
我有一个签名的applet(用jarsigner
正确验证),由于某种原因不允许从系统剪贴板复制和粘贴到JTextField
,尽管文档告诉我它应该适用于签名的applet。
此外,我还有其他小程序使用相同的密钥文件签名,让我复制和粘贴文本。我在互联网上搜索高低,似乎无法找到任何线索。是什么让我把头发拉出来似乎没有办法调试这个(控制台没有输出 - 没有抛出异常)。
有没有人对如何调试这个有任何想法,以找出为什么java不喜欢这个特定的applet?
非常感谢任何建议!
答案好吧,事实证明,2011年2月发布了Java Plug-in 1.6.0_24,系统剪贴板中的复制和粘贴被视为安全漏洞并被禁用。您可以复制和粘贴BETWEEN小程序。但是,如果您尝试使用主剪贴板中的某些内容,则无法将其复制到其中。
因此,有一些解决方法可供选择。您可以回滚到早期版本的插件。这样可行,但是未来版本的可能性仍然会保持禁用复制和粘贴,因此您永远无法升级。
另一种方法是提供自定义Java安全策略文件,该文件允许再次访问系统剪贴板。
首先找到您的本地Java安全策略文件。该文件名为java.policy,应位于Java安装的libsecurity文件夹中。在Windows 7上,可以在C: Program Files(x86) Javajre6libsecurity中找到它。将此文件复制到您的主文件夹(例如C: UsersKyle)。将文件重命名为.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
另一答案【复制/粘贴无法在签名的Applet中工作】除了丹尼斯的概述,请参阅OTN的Copy in sand-boxed app. in 1.6.0_24+。
虽然默认情况下Ctrl-c复制不再有效,但可以为“下一代”Java插件中运行的任何applet添加功能。由于存在Java Web Start,JWS提供了沙盒复制。 JNLP API的See alsojavax.jnlp.ClipboardService
,以及自Sun 1.6.0_10以来的下一代。插件,嵌入式applet可以使用JWS进行部署,并且可以访问JNLP API。
- http://pscode.org/prop/js.html。直接链接到该线程中使用的测试applet。它在沙盒小程序中提供复制功能。如果它适用于问题机器(浏览器,设置..whatever),你应该能够重做它以在签名的applet中提供(自发)粘贴。
- 基于框架的Demo. of the ClipboardService,包含源文件和构建文件。
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 = https://www.songbingjia.com/android/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) {
}
});
...允许我粘贴到该字段中。
另一答案
- 请备份
java.policy
(例如:C:Program Files (x86)Javajre7libsecurity
) - 在
java.policy
文件// "standard" properies that can be read by anyone
中查找行 - 然后修改
java.policy
并添加如下
// "standard" properies that can be read by anyone
permission java.security.AllPermission;
推荐阅读
- Kali Linux在VMWare Fusion上的安装指南[带截图]
- 尽管运行代码显示菜单,但Java applet显示白屏
- Java applet使用智能卡实现数字签名
- 'appletviewer'未被识别为内部或外部命令,可操作程序或批处理文件
- Java Applet PDF打印
- 如何在Apple Connect中获取ProductID((在App中购买))
- 如何从applet增加发布请求内容限制
- 如何在窗口更改时动态调整applet组件的大小()
- Javacard可共享接口(lookupAID返回AID但getAppletShareableInterface返回null)