Мониторинг буфера обмена в Mac OS X | Java

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

9
задан Community 23 May 2017 в 12:08
поделиться