独立应用程序中的以下代码适用于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内部复制然后粘贴到其他地方.
使用最新的java7(jdk1.7.0_10)和jdk1.6.0_33在ubuntu 11.04上都没有成功;它是should work并且在Windows 7上使用最新的java7和使用java6_37的mac osx 10.6上的预期工作.还尝试了xubuntu 12.04与那些javas,它在那里不起作用.这是一个linux / ubuntu错误吗?
解决方法:
我在工作中遇到了与应用程序相同的问题,这是我发现的一篇文章,解释了原因和可能的解决方案.我希望它有所帮助.
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.
Using gnome library你可以在剪贴板上调用store方法并修复它.到目前为止,这是唯一值得尝试的东西.还看到了GTK类似的东西,但只是在Eclipse的bug中.