我正在尝试将图像(保存在BufferedImage对象中)复制到剪贴板。我正在使用this answer中的代码。
尝试将图像粘贴到程序中时,根本没有任何反应。 GIMP显示一条消息,说明在剪贴板中没有找到图像数据。
我还尝试了this article的解决方法。实际上,我将构造函数更改为:
Robot robot = new Robot();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle screen = new Rectangle( screenSize );
BufferedImage i = robot.createScreenCapture( screen );
// ----- start of changes from workaround -----
// Work around a Sun bug that causes a hang in "sun.awt.image.ImageRepresentation.reconstruct".
new javax.swing.ImageIcon(i); // Force load.
BufferedImage newImage = new BufferedImage(i.getWidth(null), i.getHeight(null), BufferedImage.TYPE_INT_ARGB);
newImage.createGraphics().drawImage(i, 0, 0, null);
i = newImage;
// ----- end of changes from workaround -----
TransferableImage trans = new TransferableImage( i );
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
c.setContents( trans, this );
这不起作用,但它会改变行为:每当我尝试粘贴时,我的程序在控制台中显示以下异常:
javax.imageio.IIOException: Invalid argument to native writeImage
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeImage(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeOnThread(JPEGImageWriter.java:1055)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.write(JPEGImageWriter.java:357)
at javax.imageio.ImageWriter.write(ImageWriter.java:615)
at sun.awt.datatransfer.DataTransferer.imageToStandardBytesImpl(DataTransferer.java:2107)
at sun.awt.datatransfer.DataTransferer.imageToStandardBytes(DataTransferer.java:2037)
at sun.awt.X11.XDataTransferer.imageToPlatformBytes(XDataTransferer.java:165)
at sun.awt.datatransfer.DataTransferer.translateTransferable(DataTransferer.java:1277)
at sun.awt.datatransfer.DataTransferer$6.run(DataTransferer.java:2208)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:647)
at java.awt.EventQueue.access$000(EventQueue.java:96)
at java.awt.EventQueue$1.run(EventQueue.java:608)
at java.awt.EventQueue$1.run(EventQueue.java:606)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:617)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
我正在使用Ubuntu 11.10 x64并尝试粘贴各种程序,其中包括LibreOffice Draw,LibreOffice Writer,GIMP,InkScape。
mw@nb999:~$ java -version
java version "1.6.0_23"
OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre11-0ubuntu1.11.10.2)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
有没有人遇到同样的麻烦?我做错了什么,是Java漏洞,有解决方法吗?
编辑:目前我正在使用非常脏的解决方法。我在stackoverflow上找到了一个小的Python脚本,从Java写入Image到文件并将文件提供给这个脚本,然后将其复制到剪贴板。 当然,这是除了平台独立之外的一切。所以我仍然希望用Java解决方案。
你的,Max Weller
答案 0 :(得分:1)
您可能正在运行OpenJDK,它不支持编写JPEG图像。您可以尝试切换到Sun / Oracle Java。