У меня проблемы с получением данных из системного буфера обмена в 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 &» не сработало для меня как обходной путь.