2012-04-17 141 views
9

我在从Mac OS X上的系统剪贴板获取数据时遇到了麻烦。 我试图做的是听取系统剪贴板并在每次新的[基于文本]信息时打印剪贴板的内容放入它。Mac OS X上的剪贴板监视| Java

问题: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); 
    } 
} 

public class myApp { 

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

} 

我缺少什么/做错了什么?

[更新] 我发现这里类似的问题贴:Java thread goes to sleep when not in focus on OSX 但是使用命令“Java的罐子myApp.jar &”没对我来说是解决方法的工作。

+0

你有没有想过解决这个问题?我也需要同样的东西。 – 2012-07-10 07:05:34

+0

不幸的是,没有。 – 2012-08-28 08:28:36

回答