gpt4 book ai didi

Java Clipboard on Linux (text only),有的程序可以读,有的不能,为什么

转载 作者:IT王子 更新时间:2023-10-29 01:23:34 26 4
gpt4 key购买 nike

当我的基于 Java 的应用程序(不是基于浏览器的小程序)将纯文本复制到 Linux 上的系统剪贴板时,许多程序无法访问剪贴板数据,但有些程序可以。

这是我能做的最简单的测试:

import java.awt.datatransfer.*;
import java.awt.Toolkit;
import java.io.*;

public final class PasteTest {
public static void main (String... args) {
String mytext = "This is a test message, testing, 1, 2, 3....";
StringSelection sel = new StringSelection(mytext);
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
clip.setContents(sel, null);
try {
Thread.sleep(1000);
} catch (Exception e) {
}
}
}

当该程序运行时,OpenOffice (LibreOffice 3.5.7.2) 中的文件 > 粘贴能够访问它放置在系统剪贴板上的文本。但是在 Gnome 终端、Mozilla Thunderbird 和 Firefox 以及许多其他程序中使用文件 > 粘贴则不能。粘贴选项是灰色的,就好像剪贴板是空的。

如何让我的 Java 程序将纯文本发布到 Linux 上的系统剪贴板(在 Ubuntu 12.04 上测试)以便所有程序都可以访问它?

最佳答案

您的代码没问题。它的问题是它终止得太早了。

在 X 窗口系统下,将某些内容放入“剪贴板”(即名为“剪贴板”的选择)的进程必须保持 Activity 状态才能使复制的数据存活。 (Read about active and passive buffers, and notice that selections are of the active kind)。

当您的进程运行时,即 sleep(),您可以将数据粘贴到任何地方。一旦它终止,剪贴板就会变空。

这不是 Java 的特殊行为;您可以使用 charmap 或您不介意关闭的任何其他程序轻松地重现它。

我不知道 LibreOffice 是如何在你的测试中得分的。可能它是您的 alt+tab 列表中的第一个。在我的测试中,LibreOffice 的行为与任何其他应用程序一样:只要 Java 进程处于 Activity 状态,“粘贴”就会工作,并在进程终止时停止工作。

我不知道一般情况下如何解决它。运行剪贴板管理器(记住多个复制的项目,因此可能拥有所有这些项目)可能会有所帮助。

关于Java Clipboard on Linux (text only),有的程序可以读,有的不能,为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16131205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com