我正在编写一个程序,并且在我的程序中我希望在我的程序没有焦点的同时观看键盘。我使用一个名为“JNativeHook”的jar,可以在这里找到http://code.google.com/p/jnativehook/
在我的问题上: 这个jar工作并捕获每个按键和释放事件。在我的代码中,我跟踪这些,在每次按键事件中,如果按下“v”或ctrl键,我为每个键设置一个标志,如果两者都是真的,则用户正在粘贴。当用户最初粘贴程序时,计数器增加1.在下一次粘贴时,如果计数器为1,则将系统剪贴板的文本设置为“Test Paste1”递增计数器,它执行此操作3次,并在第三次计数计数器3并重新启动。 (我计划添加控件,以便在按下某个组合时,keyListener处于活动状态并尝试更改系统剪贴板;再次按下它会将其关闭)
我的问题是,有时它会修改剪贴板,我确实会粘贴正确的文本,有时它不会,我会收到错误
Exception in thread "pool-1-thread-135" java.lang.IllegalStateException: cannot open system clipboard
所以有时候我可以打开键盘而有时候不能打开键盘。我正在使用记事本进行测试。所以我运行我的程序,打开记事本,复制一些东西。然后我粘贴,它说,然后下一次粘贴有时它右边有时不,然后下一个(第二个粘贴),下一个(第三个)。然后,如果我一路走来,它就会重新开始。
为什么我有时无法访问剪贴板,我怎么能写这个,所以我保证文本会到达剪贴板?
我想把线放在while循环中,而没有异常继续。但是如果剪贴板在x时间内“无法访问”,我可能会陷入无限循环。
(续):
http://stackoverflow.com/questions/14492472/cannot-gain-control-over-clipboard-even-with-controlling-logic
答案 0 :(得分:0)
其他一些程序打开剪贴板,你正在使用的代码抛出一个异常来表明这一点。
所以,一开始看起来你似乎要忙着等待,如果你等了太久就放弃了。但是,通过将程序设置为剪贴板的所有者并在丢失时重新获得所有权(因为当它失去所有权时通知剪贴板的所有者),可以解决这个问题。
请阅读此处的主题以寻找可能的解决方案:http://www.coderanch.com/t/377833/java/java/listen-clipboard