我在从 Mac OS X 上的系统剪贴板获取数据时遇到了麻烦。我要做的是在每次将新的 [基于文本的] 信息放入其中时收听系统剪贴板并打印剪贴板的内容。
问题:下面的代码在 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 go to sleep when not in focus on OSX 但是使用命令“java -jar myApp.jar &”对我来说不是一种解决方法。