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

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 に答える