java - 复制到全局剪贴板不适用于 Ubuntu 中的 Java

标签 java swing ubuntu awt copy-paste

以下来自独立应用程序的代码在 ubuntu 中运行:

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;

public class ClipboardTest {

    public static void main(String[] args) throws Exception {
        Clipboard clipBoard = Toolkit.getDefaultToolkit().getSystemClipboard();        
        // print the last copied thing
        System.out.println(clipBoard.getContents(null).getTransferData(DataFlavor.stringFlavor));
        StringSelection data = new StringSelection("NOW");
        clipBoard.setContents(data, data);
        // prints NOW
        System.out.println(clipBoard.getContents(null).getTransferData(DataFlavor.stringFlavor));
    }

}

粘贴 (Ctrl+V) 到不同的应用程序不会产生任何结果;我期待“现在”。再次调用上述代码会出现以下异常:

Exception in thread "main" java.awt.datatransfer.UnsupportedFlavorException: Unicode String
    at sun.awt.datatransfer.ClipboardTransferable.getTransferData(ClipboardTransferable.java:160)

作为一个独立的应用程序,即使在 2011 security changes 之后也应该可以工作。 .通过 Ctrl+C 从 JTextField 内部复制,然后粘贴到其他地方。

在 ubuntu 11.04 上使用最新的 java7 (jdk1.7.0_10) 和 jdk1.6.0_33 均未成功;它should work并且在带有最新 java7 的 windows 7 和带有 java6_37 的 mac osx 10.6 上按预期工作。还用这些java尝试了xubuntu 12.04,但它在那里不起作用。这是 linux/ubuntu 的错误吗?

Related question

最佳答案

我在工作中遇到了与应用程序相同的问题,这是我发现的一篇文章,解释了原因和可能的解决方案。希望对你有帮助。

Why it happens

Clipboard persistence is a bug that affects many programs under Ubuntu and other X11-based operating systems. Fixing it is a Google Summer of Code 2010 project. Wikipedia has a good overview of the issue. If you want to fix as a user, you can install Parcellite or another clipboard manager. If you want to fix it as a programmer, you can modify your program to conform to the ClipboardManager specification.

X-Window wiki

Using gnome library您可以在剪贴板上调用 store 方法并解决此问题。到目前为止,这似乎是唯一值得尝试的事情。也看到了 GTK 的类似情况,但仅在 Eclipse 的错误中。

关于java - 复制到全局剪贴板不适用于 Ubuntu 中的 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14242719/

相关文章:

java - Hibernate 事务不工作

java - Bean 验证@ElementCollection 和@Version 冲突并验证失败

java - JTextBox总是有换行符

java - 当 OneTouchExpandable 设置为 true 时,如何以编程方式设置 JSplitPane 以隐藏右侧/底部组件?

java - 如何使用带有 HTML 的 StyledDocument 进行输出?

ubuntu - Docker Compose 卷不会将文件保存在子文件夹中

linux - 无法解决 找不到与 gatsby-cli@next 匹配的版本

java - 本地类型推断与实例

java - com.microsoft.sqlserver.jdbc.SQLServerException : The "variant" data type is not supported

ubuntu - 连接到 WordPress Docker 容器