2012-04-17 18 views
9

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í.

+0

¿Has encontrado una solución para esto? También necesito lo mismo. –

+0

Lamentablemente, no. –

Respuesta