Ich möchte die Zwischenablage des Benutzers auf eine Zeichenfolge in einer Java Konsolenanwendung festlegen. Irgendwelche Ideen?
Verwenden Sie Toolkit
, um die System-Zwischenablage abzurufen. Erstellen Sie ein StringSelection
mit dem String
und fügen Sie es dem Clipboard
hinzu.
Vereinfacht:
StringSelection selection = new StringSelection(theString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(selection, selection);
Hier ist ein einfaches SSCCE , um dies zu erreichen:
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);
}
}
Wenn Sie unter Linux arbeiten und OpenJDK verwenden, funktioniert dies nicht. Sie müssen das Sun JDK unter Linux verwenden, damit es funktioniert.
Wer immer noch auf diesen Beitrag stößt und nach dem JavaFX Weg sucht, um dies zu erreichen, hier ist es:
ClipboardContent content = new ClipboardContent();
content.putString("Some text");
content.putHtml("<b>Bold</b> text");
Clipboard.getSystemClipboard().setContent(content);
Weitere Informationen finden Sie in der Dokumentation .
Unter Linux mit 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);
}