我正在编写一个程序来侦听系统剪贴板中的更改。侦听器在单独的线程上运行,并在剪贴板的内容发生更改时执行一些操作(例如写入文件)。Java线程在没有专注于OSX时进入睡眠状态
我在使用ClipboardOwner interface轮询剪贴板,以便当我的程序失去剪贴板的所有权(意味着另一个进程修改了剪贴板)时,在我的程序中触发一个事件让我读取更改。
public class OwnershipClipboardListener extends Thread implements ClipboardOwner
{
private Clipboard clipB = Toolkit.getDefaultToolkit().getSystemClipboard();
public void run()
{
/* Initialize ClipboardListener and gain ownership of clipboard */
}
@Override
public void lostOwnership(Clipboard clipboard, Transferable transferable)
{
/* Auto-fired when I lose Clipboard ownership.
Can do processing and regaining ownership here */
}
}
的问题是,在OSX上运行时,到剪贴板的任何变化被反映仅如果我手动Cmd的-Tab键以在船坞内的正在运行的进程图标。因此,如果在切换到停靠栏图标之前存在多个剪贴板操作,则只有最后一个才有效。我不在Linux或Windows上面对这个问题。
这就像线程在程序失去焦点时进入睡眠状态,但最后一个事件触发器在唤醒时仍然会触发。有什么办法可以预防这种睡眠吗?
帖子[这](HTTP:// stackoverflow.com/questions/4402001/cant-copy-to-a-clipboard-from-a-background-java-application-on-mac-osx“)和[this](http://stackoverflow.com/questions/ 7717824/cant-monitor-system-clipboard-changes-from-a-background-java-application-on-mac)请参阅m有类似的问题,但在大多数情况下,他们的剪贴板是做数据传输的一种解决方法。我实际上需要一直在阅读剪贴板。 – 2012-04-06 04:58:38