在Java中复制到剪贴板

82

我想在Java控制台应用程序中将用户的剪贴板设置为字符串。有什么建议吗?


我尝试使用AWT但是无效。 - clone1018
2
请展示您尝试过的代码,并告诉我们哪些部分出了问题。 - unbeli
5个回答

150
使用Toolkit获取系统剪贴板。使用String创建StringSelection并将其添加到Clipboard中。 简化:
StringSelection selection = new StringSelection(theString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(selection, selection);

对我来说没有用,剪贴板被清空了。我正在使用Linux。 - Searene
可以考虑原问题的第二条评论或者 rado 在下面的 答案 - user85421

38

这里有一个简单的SSCCE来完成这个任务:


(注:该内容为原文,已经是中文,无需翻译)
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);
    }
}

12

如果还有人通过搜索JavaFX的方式来完成此操作,这里是方法:

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

更多信息请阅读文档


3

如果您使用的是Linux并且使用OpenJDK,那么它将无法工作。您必须在Linux上使用Sun JDK才能使其正常工作。


3
为什么?你有更多关于它的信息吗?是个bug报告吗?这可以让你获得一些声望 ;) https://dev59.com/W2Yq5IYBdhLWcg3wujDF - Karussell
1
什么不起作用?这是对其他答案之一的回应吗? - Peter Mortensen
这非常不对。Sun JDK 和 OpenJDK 构建方式相同,包括作为客户端的 Java 在内的 Linux 上的剪贴板工作正常。 - judovana

1
在Linux中使用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
5
这实在是违背了跨平台编程语言的理念。 - Neuron
这缺少任何形式的卫生保健。请不要在生产代码中使用它。如果有人复制字符串“rm -rf $HOME”,你刚刚删除了他们的主目录。此外,我相信Ubuntu默认情况下不会安装xclip。 - Sean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接