2010-08-28 34 views
58

Quiero establecer portapapeles del usuario a una cadena en una aplicación de consola de Java. ¿Algunas ideas?copia en el portapapeles en Java

+0

He intentado utilizar AWT en vano. – clone1018

+1

A continuación, mostrar lo que ha intentado y nos dicen lo que exactamente no funcionó – unbeli

Respuesta

109

Uso del Toolkit para obtener el system clipboard. Crea un StringSelection con la cadena y agrégalo al portapapeles.

simplificado:

StringSelection selection = new StringSelection(theString); 
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
    clipboard.setContents(selection, selection); 
30

Aquí es un simple SSCCE de lograr esto:

import java.awt.*; 
import java.awt.datatransfer.*; 
import java.io.*; 

class ClipboardTest 
{ 
    public static void main(String[] args) 
     throws UnsupportedFlavorException, IOException 
    { 
     Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); 
     StringSelection testData; 

     // Add some test data 

     if (args.length > 0) 
      testData = new StringSelection(args[0]); 
     else 
      testData = new StringSelection("Test Data"); 

     c.setContents(testData, testData); 

     // Get clipboard contents, as a String 

     Transferable t = c.getContents(null); 

     if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) 
     { 
      Object o = t.getTransferData(DataFlavor.stringFlavor); 
      String data = (String)t.getTransferData(DataFlavor.stringFlavor); 
      System.out.println("Clipboard contents: " + data); 
     } 

     System.exit(0); 
    } 
} 
3

Si está en Linux y el uso de OpenJDK, no va a funcionar. Debe usar Sun JDK en Linux para que funcione.

+3

¿Por qué? ¿tienes más información al respecto? ¿Un informe de error? Puede obtener cierta reputación;) http://stackoverflow.com/q/14242719/194609 – Karussell

+0

¿Qué no funcionará? ¿Es esta una respuesta a una de las otras respuestas? –

-4

Este trabajo como un campeón;

String get= text.getText(); 
    StringSelection selec= new StringSelection(get); 
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
    clipboard.setContents(selec, selec); 
+5

Esto es exactamente lo mismo que Carlos escribió 5 años antes – fishinear

1

En Linux con xclip:

Runtime run = Runtime.getRuntime(); 
Process p = null; 
String str = "hello"; 
try { 
     p = run.exec(new String[]{"sh", "-c", "echo " + str + " | xclip -selection clipboard"}); 
} 
catch (Exception e) { 
    System.out.println(e); 
} 
+0

¿Qué pasa si la cadena contiene caracteres de fin de línea? ¿Funcionará entonces? –

1

Para alguien todavía tropezar con este post en busca de la forma JavaFX Para lograr esto, aquí van:

ClipboardContent content = new ClipboardContent(); 
content.putString("Some text"); 
content.putHtml("<b>Bold</b> text"); 
Clipboard.getSystemClipboard().setContent(content); 

Para más información, read the documentation.

Cuestiones relacionadas