3

我正在尝试使用 ImageIO.read 在多线程环境中从输入流中读取图像。以下是代码,

entity = httpResponse.getEntity(); //httpResponse is apache hc response object
bufImage = ImageIO.read(entity.getContent()); //reading image

基本上,我正在使用 Apache HttpClient 创建一个 HttpConnection 并将图像作为流读取,然后将其转换为 BufferedImage(bufImage)。

此代码在正常运行时工作正常。当我在多个线程中运行它时,出现以下异常,

Exception in thread "Thread-3258" java.lang.NoClassDefFoundError: Could not initialize class sun.java2d.Disposer
    at javax.imageio.stream.FileCacheImageInputStream.<init>(Unknown Source)
    at com.sun.imageio.spi.InputStreamImageInputStreamSpi.createInputStreamInstance(Unknown Source)
    at javax.imageio.ImageIO.createImageInputStream(Unknown Source)
    at javax.imageio.ImageIO.read(Unknown Source)
    at com.example.ImgDownload.run(ImgDownload.java:60)
    at java.lang.Thread.run(Unknown Source)

ImgDownload.java:60 是我使用前面提到的 ImageIO 读取的行。我该如何解决这个问题?

谢谢,阿比

4

2 回答 2

1

我正在一个 Ubuntu 12 中运行一个应用程序。

我已经安装了 libxtst6 并将这个 java 参数添加到我的 JAVA_OPTS 变量中:-Djava.awt.headless=true

然后它工作正常。

于 2015-06-12T21:19:47.747 回答
0

是否是您在“生产”环境中使用不同的 JRE/JDK 的情况 - 即当您在多线程环境中运行它时?类加载器所指的类是特定于 sun 的类——您是否在使用类似 openjdk 的东西可能在您遇到错误的其他环境中?

于 2011-06-14T10:56:44.507 回答