我在从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){}}
}
我想念/做错了什么?
[更新]
我发现这里发布了类似的问题:Java线程不在关注OSX时进入睡眠状态, 但是使用命令“ java -jar
myApp.jar&”对我来说不起作用。