Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “错误”;无法打开系统剪贴板";,尝试设置系统剪贴板时失败/打开或关闭。原因是什么?_Java - Fatal编程技术网

Java “错误”;无法打开系统剪贴板";,尝试设置系统剪贴板时失败/打开或关闭。原因是什么?

Java “错误”;无法打开系统剪贴板";,尝试设置系统剪贴板时失败/打开或关闭。原因是什么?,java,Java,我正在写一个程序,在我的程序中的某个点上,我希望在我的程序没有焦点时观察键盘。我使用一个名为“JNativeHook”的罐子,可以在这里找到 关于我的问题: 这个jar工作并捕获每个按键和释放事件。在我的代码中,我会跟踪这些,在每次按键事件中,如果按下“v”或ctrl键,我会为每个键设置一个标志,如果两者都为真,则用户正在粘贴。当用户最初粘贴时,程序将计数器增加到1。在下一次粘贴时,如果计数器为1,则将系统剪贴板的文本设置为“Test Paste1”,使计数器递增3次,在第三次粘贴时,将计数器的

我正在写一个程序,在我的程序中的某个点上,我希望在我的程序没有焦点时观察键盘。我使用一个名为“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

其他一些程序打开了剪贴板,您正在使用的代码会抛出一个异常来指示这一点

所以,一开始你似乎不得不忙着等待,如果你等得太久,你就会放弃。但是,有一种可能的解决方法,将您的程序设置为剪贴板的所有者,并在您丢失它时重新获取所有权(当剪贴板的所有者丢失所有权时会收到通知)


阅读此处的线程以获得可能的解决方案:

我得到了部分解决方案。现在看来效果更好了。我可以获得更多连续的正确粘贴接管。但我还是时不时地错过一些@帕塔舒在吗?我们可以讨论我现在的代码吗?