当没有关注OSX时,Java线程进入休眠状态
发布时间:2020-12-15 02:33:09 所属栏目:Java 来源:网络整理
导读:我正在编写一个程序来监听系统剪贴板的更改.侦听器在单独的线程上运行,并在剪贴板的内容发生更改时执行一些操作(例如,写入文件). 我正在使用ClipboardOwner interface轮询剪贴板,这样当我的程序失去剪贴板的所有权(意味着另一个进程已经修改了剪贴板)时,我的
我正在编写一个程序来监听系统剪贴板的更改.侦听器在单独的线程上运行,并在剪贴板的内容发生更改时执行一些操作(例如,写入文件).
我正在使用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 */ } } 问题是,当在OS??X中运行时,只有当我手动将Cmd-Tab移动到Dock中正在运行的进程图标时,才会反映对剪贴板的任何更改.因此,如果在切换到停靠图标之前有多个剪贴板操作,则只有最后一个具有任何效果.我在Linux或Windows上没有遇到这个问题. 这就像当程序失去焦点时线程进入休眠状态,但最后一个事件触发器在唤醒时仍会触发.有什么办法可以防止这种睡眠吗? 解决方法
我怀疑OSX没有提供剪贴板更改的通知,因此Java会因为其他原因被唤醒时通知您.
我的怀疑来自NSPasteboard文档,特别是changeCount例程.它说“因此,您可以在获取粘贴板的所有权时记录更改计数,然后将其与从changeCount返回的值进行比较,以确定您是否仍拥有所有权.”没有提到使用事件来检测更改. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |