【问题标题】:ImageIO.read throws exception in multithreaded executionImageIO.read 在多线程执行中抛出异常
【发布时间】:2011-06-14 10:15:26
【问题描述】:

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

谢谢, 阿比

【问题讨论】:

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


    【解决方案1】:

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

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

    然后它就可以正常工作了。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我正在使用相同的。环境也是一样的,我试着把它作为线程运行...它没有工作,所以让它成为通常的正常代码..
      猜你喜欢
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多