2012-04-17 1 views
9

Mac OS Xのシステムクリップボードからデータを取得する際に問題が発生しました。 私がやっていることは、新しい[テキストベース]情報があるたびに、システムクリップボードを聴いてクリップボードの内容を印刷することですそれに入れなさい。Mac OS Xでクリップボードを監視する| Java

問題は:Windows 7とopenSUSE Linuxマシンでは蛇のコードが正常に動作しますが、Mac OS Xで同じコードを実行しようとすると、アプリケーションはフォーカスがアプリケーションに与えられるまでクリップボードの新しい内容を印刷できません。

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){}} 

} 

/間違っている:

私のソースコード[Iは、ドックのアプリケーションアイコンをクリックするまでは何も...印刷されませんか]?

[更新] 私は同様の問題がここに掲載見つかりましたJava thread goes to sleep when not in focus on OSX は、しかし、私の回避策として動作しませんでした「myApp.jar & -jarのjava」コマンドを使用して。

+0

この問題を回避する方法はありますか?私も同じことが必要です。 –

+0

残念ながら、いいえ。 –

答えて

3

これは、オープンバグのようです、この問題の周りの何エレガントな方法がないと思われMACOSX_PORT-511 ClipboardOwner method lostClipboard is not called if app is not focused.

+0

あなたの答えをありがとう。 回避策について知っていますか? –

+0

あなたは大歓迎です!いいえ、申し訳ありませんが、私はこの問題の回避策を知りません:-( – siegi

+0

うわー、私はこれを以前に知りたがっていればいいと思っています... – allyourcode