Tengo problemas para obtener datos del portapapeles del sistema en Mac OS X. Lo que trato de hacer es escuchar el portapapeles del sistema e imprimir el contenido del portapapeles cada vez que aparece información nueva [basada en texto] poner en ello.Supervisión del portapapeles en Mac OS X | Java
El problema: el código siguiente funciona perfectamente en Windows 7 y máquinas openSUSE Linux, sin embargo, cuando intento ejecutar el mismo código en Mac OS X, el programa no imprime el nuevo contenido del portapapeles hasta que se enfoca la aplicación . [No se imprime nada hasta que haga clic en el icono de la aplicación en el muelle ...]
Mi código fuente:
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){}}
}
Lo que me falta/haciendo mal?
[Actualización] encontré problema similar publicado aquí: Java thread goes to sleep when not in focus on OSX Sin embargo, utilizando el "java-jar myApp.jar &" comando no funcionó como una solución para mí.
¿Has encontrado una solución para esto? También necesito lo mismo. –
Lamentablemente, no. –