4

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 でテスト)。

4

1 に答える 1

5

あなたのコードは問題ありません。その問題は、終了が早すぎることです。

X ウィンドウ システムでは、「クリップボード」(つまり、「クリップボード」という名前の選択) に何かを配置するプロセスは、コピーされたデータが生き残るために存続する必要があります。(アクティブ バッファーとパッシブ バッファーについて読み、セレクションがアクティブな種類のものであることに注意してください)。

プロセスの実行中、つまりsleep()s の間、どこにでもデータを貼り付けることができます。終了すると、クリップボードは空になります。

これは Java の特別な動作ではありません。charmapまたは、閉じてもかまわない他のプログラムで簡単に再現できます。

あなたのテストで LibreOffice がどのように得点したかはわかりません。おそらくそれはあなたのalt + tabリストの最初でした. 私のテストでは、LibreOffice は他のアプリと同じように動作しました。「貼り付け」は、Java プロセスが生きている限り機能し、プロセスが終了すると機能を停止しました。

一般的な場合の修正方法がわかりません。クリップボード マネージャー (複数のコピーされたアイテムを記憶しているため、おそらくそれらすべてを所有している) を実行すると役立つ場合があります。

于 2013-04-22T00:16:25.313 に答える