ImageIO.read在多线程执行中抛出异常

时间:2011-06-14 10:15:27

标签: java multithreading thread-safety apache-commons javax.imageio

我正在尝试使用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读取的行。我该如何解决这个问题?

谢谢, 阿比

2 个答案:

答案 0 :(得分:1)

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

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

然后它工作正常。

答案 1 :(得分:0)

是否在“生产”环境中使用不同的JRE / JDK - 即在多线程环境中运行时?类加载器所引用的类是一个特定于太阳的类 - 你是否在其他环境中使用类似openjdk的东西你会收到错误?