【问题标题】:Copying to the clipboard in Java [duplicate]用Java复制到剪贴板[重复]
【发布时间】:2011-04-05 06:02:07
【问题描述】:

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

【问题讨论】:

  • 我尝试使用 AWT 无济于事。
  • 然后展示您尝试过的内容并告诉我们究竟是什么无效

标签: java string clipboard 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 才能正常工作。

      【讨论】:

      • 为什么?你有更多关于它的信息吗?错误报告?您可以获得一些声誉;)stackoverflow.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。
      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      相关资源
      最近更新 更多