加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

当没有关注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返回的值进行比较,以确定您是否仍拥有所有权.”没有提到使用事件来检测更改.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读