I want to set the user's clipboard to a string in a Java console application. Any ideas?
Asked
Active
Viewed 9.8k times
5 Answers
149
Use the Toolkit
to get the system clipboard. Create a StringSelection
with the String
and add it to the Clipboard
.
Simplified:
StringSelection selection = new StringSelection(theString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(selection, selection);
-
-
it should, maybe consider the second comment on original question, or rado's [answer](https://stackoverflow.com/a/11059985/85421) below – user85421 Apr 14 '19 at 14:35
37
Here is a simple SSCCE to accomplish this:
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);
}
}
11
For anyone still stumbling upon this post searching for the JavaFX way to accomplish this, here you go:
ClipboardContent content = new ClipboardContent();
content.putString("Some text");
content.putHtml("<b>Bold</b> text");
Clipboard.getSystemClipboard().setContent(content);
For further information, read the documentation.

Peter Mortensen
- 30,738
- 21
- 105
- 131

xeruf
- 2,602
- 1
- 25
- 48
3
If you are on Linux and using OpenJDK, it will not work. You must use the Sun JDK on Linux for it to work.

Peter Mortensen
- 30,738
- 21
- 105
- 131

rado
- 4,040
- 3
- 32
- 26
-
3Why? do you have more information about it? A bug report? You could get some reputation ;) http://stackoverflow.com/q/14242719/194609 – Karussell Jan 19 '13 at 22:32
-
1What will not work? Is this a response to one of the other answers? – Peter Mortensen Feb 09 '18 at 23:30
-
This is very wrong. Sun JDK isd openjdk build as everything else, and clipoabrd on linux, including java as client, works fine – judovana Oct 03 '21 at 09:39
1
In Linux with 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);
}

Peter Mortensen
- 30,738
- 21
- 105
- 131

Iovanny Olguín Ávila
- 19
- 3
-
What if the string contains end-of-line characters? Will it work then? – Peter Mortensen Feb 09 '18 at 23:36
-
5that really defeats the idea of a multi platform programming language.. – Neuron Mar 21 '18 at 18:45
-
This is lacking any kind of sanitation. Please don't use this in production code. If someone copies the string `" rm -rf $HOME`, you've just deleted their home directory. Also, I believe Ubuntu doesn't come with xclip by default. – Sean Oct 19 '21 at 18:01