Mac OS X | Java上的剪贴板监控

Mac OS X | Java上的剪贴板监控,java,multithreading,macos,awt,clipboard,Java,Multithreading,Macos,Awt,Clipboard,从Mac OS X上的系统剪贴板获取数据时遇到问题。 我试图做的是听系统剪贴板并在每次输入新的[基于文本的]信息时打印剪贴板的内容 问题:bellow代码在Windows 7和openSUSE Linux机器上运行得非常好,但是当我尝试在Mac OS X上运行相同的代码时,程序无法打印剪贴板的新内容,直到应用程序获得焦点。[在我单击dock上的应用程序图标之前,不会打印任何内容…] 我的源代码: import java.awt.Toolkit; import java.awt.datatra

从Mac OS X上的系统剪贴板获取数据时遇到问题。 我试图做的是听系统剪贴板并在每次输入新的[基于文本的]信息时打印剪贴板的内容

问题:bellow代码在Windows 7和openSUSE Linux机器上运行得非常好,但是当我尝试在Mac OS X上运行相同的代码时,程序无法打印剪贴板的新内容,直到应用程序获得焦点。[在我单击dock上的应用程序图标之前,不会打印任何内容…]

我的源代码:

import java.awt.Toolkit;  
import java.awt.datatransfer.*;  
import java.io.IOException;  

public class ClipboardListener extends Thread implements ClipboardOwner {

    Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();  

    public void run(){  
        Transferable selection = systemClipboard.getContents(this);  
        gainOwnership(selection);  
    }  

    public void gainOwnership(Transferable t){ 
        try {this.sleep(100);} 
        catch (InterruptedException e) {e.printStackTrace();}
        systemClipboard.setContents(t, this);  
    }  

    public void lostOwnership(Clipboard clipboard, Transferable contents) {
        try {System.out.println((String) clipboard.getData(DataFlavor.stringFlavor));} 
        catch (UnsupportedFlavorException e) {} 
        catch (IOException e) {}
        gainOwnership(contents);  
    }  
}

我错过了什么/做错了什么

[更新] 我在这里发现了类似的问题:
但是,使用命令“java-jar myApp.jar&”并不能解决我的问题。

这似乎是一个开放性错误,请参见

似乎没有解决此问题的优雅方法,NSPasteboard不提供剪贴板所有权概念


唯一的解决方案是定期对剪贴板进行采样

不客气!不,对不起,我不知道这个问题的解决方法:-(@allyourcode你熟悉Mac OS X Api吗?你认为使用RMI访问Mac OSX Api是解决这个问题的好方法吗?[我不熟悉Mac OS X Api,我不想在上面白费时间…]你是指JNI吗?如果有一种方法来编写C或C++代码来访问剪贴板(我怀疑是的话),那么我认为这会起作用。也许这个力量会和你在一起。你有没有解决这个问题?我也需要同样的东西。
public class myApp {

    public static void main(String[] args){
        ClipboardListener listener = new ClipboardListener();
        listener.start();
        while(true){}}

}