用Java复制到剪贴板[重复]
Posted
技术标签:
【中文标题】用Java复制到剪贴板[重复]【英文标题】:Copying to the clipboard in Java [duplicate] 【发布时间】:2011-04-05 06:02:07 【问题描述】:我想将用户的剪贴板设置为 Java 控制台应用程序中的字符串。有什么想法吗?
【问题讨论】:
我尝试使用 AWT 无济于事。 然后展示您尝试过的内容并告诉我们究竟是什么无效 【参考方案1】:使用Toolkit
获取system clipboard。使用String
创建一个StringSelection
并将其添加到Clipboard
。
简化:
StringSelection selection = new StringSelection(theString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(selection, selection);
【讨论】:
这对我不起作用,剪贴板已被清除。我正在使用 Linux。 它应该,也许考虑对原始问题的第二条评论,或者下面 rado 的answer【参考方案2】:这是一个简单的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);
【讨论】:
【参考方案3】:对于仍在寻找此帖子以寻找JavaFX 方法来完成此操作的任何人,请继续:
ClipboardContent content = new ClipboardContent();
content.putString("Some text");
content.puthtml("<b>Bold</b> text");
Clipboard.getSystemClipboard().setContent(content);
更多信息,read the documentation。
【讨论】:
【参考方案4】:如果您在 Linux 上并使用 OpenJDK,它将无法正常工作。您必须在 Linux 上使用 Sun JDK 才能正常工作。
【讨论】:
为什么?你有更多关于它的信息吗?错误报告?你可以获得一些声誉;)***.com/q/14242719/194609 什么不起作用?这是对其他答案之一的回应吗? 这是非常错误的。 Sun JDK isd openjdk build as all else, linux 上的 clipoabrd,包括 java 作为客户端,工作正常【参考方案5】:在 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);
【讨论】:
如果字符串包含行尾字符怎么办?那么它会起作用吗? 这真的违背了多平台编程语言的想法.. 这里没有任何卫生设施。请不要在生产代码中使用它。如果有人复制了字符串" rm -rf $HOME
,那么您刚刚删除了他们的主目录。另外,我相信 Ubuntu 默认不附带 xclip。以上是关于用Java复制到剪贴板[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 Flash 的情况下在 Firefox 中实现复制到剪贴板。需要实施[重复]