Mac OS X | Java上的剪贴板监控
从Mac OS X上的系统剪贴板获取数据时遇到问题。 我试图做的是听系统剪贴板并在每次输入新的[基于文本的]信息时打印剪贴板的内容 问题:bellow代码在Windows 7和openSUSE Linux机器上运行得非常好,但是当我尝试在Mac OS X上运行相同的代码时,程序无法打印剪贴板的新内容,直到应用程序获得焦点。[在我单击dock上的应用程序图标之前,不会打印任何内容…] 我的源代码:Mac OS X | Java上的剪贴板监控,java,multithreading,macos,awt,clipboard,Java,Multithreading,Macos,Awt,Clipboard,从Mac OS X上的系统剪贴板获取数据时遇到问题。 我试图做的是听系统剪贴板并在每次输入新的[基于文本的]信息时打印剪贴板的内容 问题:bellow代码在Windows 7和openSUSE Linux机器上运行得非常好,但是当我尝试在Mac OS X上运行相同的代码时,程序无法打印剪贴板的新内容,直到应用程序获得焦点。[在我单击dock上的应用程序图标之前,不会打印任何内容…] 我的源代码: import java.awt.Toolkit; import java.awt.datatra
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);
}
}
我错过了什么/做错了什么 [更新] 我在这里发现了类似的问题:
但是,使用命令“java-jar myApp.jar&”并不能解决我的问题。这似乎是一个开放性错误,请参见似乎没有解决此问题的优雅方法,NSPasteboard不提供剪贴板所有权概念
唯一的解决方案是定期对剪贴板进行采样 不客气!不,对不起,我不知道这个问题的解决方法:-(@allyourcode你熟悉Mac OS X Api吗?你认为使用RMI访问Mac OSX Api是解决这个问题的好方法吗?[我不熟悉Mac OS X Api,我不想在上面白费时间…]你是指JNI吗?如果有一种方法来编写C或C++代码来访问剪贴板(我怀疑是的话),那么我认为这会起作用。也许这个力量会和你在一起。你有没有解决这个问题?我也需要同样的东西。
public class myApp {
public static void main(String[] args){
ClipboardListener listener = new ClipboardListener();
listener.start();
while(true){}}
}