Java剪贴板不工作

时间:2012-05-09 14:20:42

标签: java linux clipboard openjdk

我试图将图片复制到剪贴板并使用此代码段将其粘贴到gimp中:

BufferedImage bi = new BufferedImage(board.getAmount()*16,16,BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();

Color[] colors = board.getColors();

for (int loop = 0; loop < board.getAmount(); loop++) {
    g2d.setColor(colors[loop]);
    g2d.fill(new Rectangle(16*loop,0,16,16));
}



ImageSelection is = new ImageSelection(bi);

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(is, null);

无论如何理论上一切都应该没有问题。它没有给我任何错误,但是当我尝试粘贴图像时,没有任何反应。

这是在两台不同的Linux机器上完成的,但都没有用。然后我来到学校并在Windows上使用相同的代码尝试了它并且它有效。

所以我想我真正的问题是它与open-jdk或java 1.7有什么关系,还是linux的问题?我该如何解决?

2 个答案:

答案 0 :(得分:0)

我认为下一页可能很有用:http://www.java2s.com/Code/Java/2D-Graphics-GUI/SendingImageObjectsthroughtheClipboard.htm

请考虑以下行将图像复制到剪贴板。

final Clipboard clipboard = frame.getToolkit().getSystemClipboard();
label.setTransferHandler(new ImageSelection());
...
TransferHandler handler = label.getTransferHandler();
handler.exportToClipboard(label, clipboard, TransferHandler.COPY);

答案 1 :(得分:0)

我遇到了同样的问题,发现这个有用:

final Clipboard clipboard = frame.getToolkit().getSystemSelection();

...然后继续使用它作为常规剪贴板。 “系统选择”允许您更改窗口管理器认为选择的内容,因此“在剪贴板上”。

我不确定检测是否应该使用系统选择或系统剪贴板的最佳方法,但看起来Windows将为getSystemSelection返回null,因此可以用作测试。