我正在编写一个程序,并且在我的程序中,我希望在我的程序没有焦点时观看键盘。我使用一个名为“JNativeHook”的罐子,可以在这里找到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