Mac OS X でシステム クリップボードからデータを取得するのに問題があります。私がしようとしているのは、システム クリップボードをリッスンし、新しい [テキスト ベースの] 情報が入力されるたびにクリップボードの内容を印刷することです。
問題: 次のコードは、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){}}
}
私が見逃している/間違っていることは何ですか?
[更新] ここに投稿された同様の問題を見つけました: OSX にフォーカスがない場合、Java スレッドがスリープ状態になり ます。