スタンドアロン アプリケーションからの次のコードは、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) しても何も起こりません。「今」を期待しています。上記のコードを 2 回呼び出すと、次の例外が発生します。
Exception in thread "main" java.awt.datatransfer.UnsupportedFlavorException: Unicode String
at sun.awt.datatransfer.ClipboardTransferable.getTransferData(ClipboardTransferable.java:160)
スタンドアロン アプリケーションとして、これは2011 年のセキュリティ変更の後でも機能するはずです。JTextField 内から Ctrl+C を使用してコピーし、別の場所に貼り付けると機能します。
最新のjava7(jdk1.7.0_10)とjdk1.6.0_33の両方を使用したubuntu 11.04で失敗しました。最新の java7 を搭載した Windows 7 および java6_37 を搭載した mac osx 10.6 で期待どおりに動作するはずです。これらのJavaでxubuntu 12.04も試してみましたが、そこでは機能しません。これは linux/ubuntu のバグですか?