在 OSX 上,Java 线程在不关注时会进入睡眠状态

2024-05-26

我正在编写一个程序来监听系统剪贴板的更改。侦听器在单独的线程上运行,并在剪贴板的内容更改时执行某些操作(例如写入文件)。

我正在使用轮询剪贴板剪贴板所有者界面 http://www.javapractices.com/topic/TopicAction.do?Id=82,这样当我的程序失去剪贴板的所有权(意味着另一个进程修改了剪贴板)时,我的程序中就会触发一个事件,让我读取更改。

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 键切换到 Dock 中正在运行的进程图标时,对剪贴板的任何更改才会反映出来。因此,如果在切换到停靠图标之前有多个剪贴板操作,则只有最后一个有效果。我在 Linux 或 Windows 上没有遇到这个问题。

这就好像当程序失去焦点时线程会进入睡眠状态,但当它醒来时最后一个事件触发器仍然会触发。有什么办法可以阻止这种睡眠吗?


我怀疑 OSX 不提供剪贴板更改的通知,因此 Java 正在尽其所能,在它因其他原因被唤醒时通知您。

我的怀疑来自于NSP纸板 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSPasteboard_Class/Reference/Reference.html#//apple_ref/occ/cl/NSPasteboard文档,changeCount特别是例行公事。它说“因此,您可以在获得粘贴板所有权时记录更改计数,然后将其与从changeCount返回的值进行比较,以确定您是否仍然拥有所有权。”没有提到使用事件来检测更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 OSX 上,Java 线程在不关注时会进入睡眠状态 的相关文章

随机推荐

  • Rest 和 Http 中“无状态”的含义

    当我阅读有关 REST 是什么的文档时 他们总是说 REST api 应该是无状态的 在这里 我感觉有点尴尬 因为普通的 HTTP 也是无状态的 既然REST可以说是一种使用HTTP协议的特殊架构 那么说REST应该是无状态的似乎是多余的
  • 将更改从通用差异导入 git 存储库

    我正在尝试将更改从一个源代码控制系统 专有且复杂 导入到 git 存储库中 我目前正在通过运行一个脚本来执行此操作 该脚本只是按顺序同步到每个修订版并将其提交到 git 存储库 但由于各种原因 这已变得不可行 对于每个修订版 我都可以获得描
  • 从单击的按钮上移除焦点

    当我单击按钮时 焦点将设置到该按钮 如何使用 C 中的 WIN API 移除此按钮的焦点 我想也许以某种方式SendMessageWIN API 方法可以从按钮上移除焦点 我只有按钮的句柄 也无法再访问父窗口 我知道几乎每次都可以使用 Se
  • 如何理解SpatialDropout1D以及何时使用它?

    偶尔我会看到一些模型正在使用SpatialDropout1D代替Dropout 例如 在词性标记神经网络中 他们使用 model Sequential model add Embedding s vocabsize EMBED SIZE i
  • 如何从另一个插件应用一个 Gradle 插件?

    我试图将 android 插件封装在我自己的插件中 但是当我尝试应用我的插件时 构建失败并出现异常 A problem occurred evaluating root project myproj gt Failed to apply p
  • 旋转矩阵openCV

    我想知道如何找到框架中一组特征的旋转矩阵 我会更具体 我有 2 个具有 20 个特征的帧 假设第 1 帧和第 2 帧 我可以估计两个帧中特征的位置 例如 假设位置 x y 处的某个第 1 帧特征 并且我确切地知道它在哪里 所以假设为 x y
  • Verilog:如何取绝对值

    在 verilog 中 我有一个二进制值数组 如何取减去值的绝对值 Verilog代码 module aaa clk input clk reg 7 0 a 1 9 reg 7 0 s 1 9 always posedge clk begi
  • 从函数返回哈希值的最佳 Perl 实践是什么?

    我正在考虑将哈希引用传递给函数或从函数返回数据的最佳实践 一方面 仅将输入值传递给函数并仅返回输出变量似乎很直观 然而 在 Perl 中传递哈希值只能通过引用来完成 因此有点混乱 而且似乎更有可能犯错误 另一种方法是在输入变量中传递引用 但
  • GIT 中的 Fastlane 应用程序文件?如何检索当前的 apple_id?

    我为我的 XCode 项目设置了 Fastlane 来实现构建自动化 至少 Fastfile 包含构建选项 应该位于 GIT 中 但我也很高兴 Appfile 团队标识符 也位于 GIT 中 主要问题 Appfile 应该包含我的 appl
  • 实体框架映射枚举:指定的值不是类型“Edm.Int32”的实例参数名称:值

    我试图将实体框架查询的结果返回到我自己的 dto 类中 同时映射我的枚举 TradeType 我收到以下错误 指定的值不是类型 Edm Int32 的实例参数名称 值 知道如何修复或解决方法吗 Thanks public IEnumerab
  • 如何在 Android 中以编程方式在 Whatsapp 中共享 GIF 图像?

    WhatsApp 添加了显示 GIF 的新功能 如果有人知道如何在 Whatsapp 中分享 GIF 请告诉我 尝试这个 private void shareGif String resourceName String baseDir En
  • 为什么 IIS 不执行我的网站根目录 index.php 文件的 PHP 代码?

    IIS实际上是在发送将代码发送到浏览器而不是执行它 但是 仅针对根http domain com index php file 该文件夹中的所有其他 php 文件和子文件夹中的 index php 文件均按预期执行 我怎样才能执行我的根in
  • 批量获取当前目录,不带盘符

    如何获取当前工作目录并获取没有驱动器号的路径 例如 C testing test test I would like to get in a variable testing test test 如何修剪驱动器盘符 我可以使用获取完整路径
  • 使用 puppeteer 获取完整的网页源 html - 但某些部分总是丢失

    我正在尝试抓取下面网页上的特定字符串 https www booking com hotel nl scandic sanadome nijmegen en gb html checkin 2020 09 19 checkout 2020
  • 计算单词和字符[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我一直在寻找使用 jQuery 将单
  • Flutter“运行 pod install 时出错”“Pods-Runner”目标具有传递依赖项

    当尝试运行我的 flutter 项目时 我得到 运行 pod install 时出错 我看到另一个非常相似的post https github com flutter flutter issues 11856但我不确定我是否也遇到同样的问题
  • mysql 数据库更新和 codeigniter 行受影响的功能[重复]

    这个问题在这里已经有答案了 我在更新查询后使用此功能此 codeigniter 功能 this gt db gt affected rows 如果我更新值 它会返回受影响的行数 但如果我更新与之前相同的值 它会返回 0 受影响的行 任何帮助
  • 为什么 Math.Round 不返回 int? [复制]

    这个问题在这里已经有答案了 在 C 中 为什么舍入数学函数 Floor Ceiling 和 Round 不返回int 考虑到函数的结果始终是整数 为什么它返回一个float double or decimal double has the
  • 用线性增加的值填充向量

    我会用线性增加的值填充 初始化一个向量 例如 对于这个向量中的每个元素 我希望下一个是a比以前更多 或者kth元素的值为k a 像这样的东西 float a 1 132 vector
  • 在 OSX 上,Java 线程在不关注时会进入睡眠状态

    我正在编写一个程序来监听系统剪贴板的更改 侦听器在单独的线程上运行 并在剪贴板的内容更改时执行某些操作 例如写入文件 我正在使用轮询剪贴板剪贴板所有者界面 http www javapractices com topic TopicActi