1

特定のイメージで、JAI を使用すると OutOfMemory 例外が発生します。JAI が巨大な byte[] を割り当てようとしているようです。これは、おそらく画像のエラーが原因です。回避策はありますか?そうでない場合、事前にエラーを検出する方法はありますか? 次に例を示します。

URL bad = new URL("http://static4.businessinsider.com/image/505c5461ecad047a3500002b-772-598/share-of-income-to-labor.png");
RenderedOp op = JAI.create("stream", SeekableStream.wrapInputStream(url, true));
op.createInstance();

原因: java.lang.OutOfMemoryError: Java heap space at com.sun.media.jai.codecimpl.PNGImage.readChunk(PNGImageDecoder.java:554) at com.sun.media.jai.codecimpl.PNGImage.(PNGImageDecoder.java :489) com.sun.media.jai.codecimpl.PNGImageDecoder.decodeAsRenderedImage(PNGImageDecoder.java:81) で com.sun.media.jai.opimage.CodecRIFUtil.create(CodecRIFUtil.java:120) で com.sun. media.jai.opimage.PNGRIF.create(PNGRIF.java:56) ... 20 以上

4

3 に答える 3

1

古いJDKに行き詰まっているためにJAIを使用していますか? 標準のJDK 1.6 PNGライブラリには、少なくともあなたが提供したサンプル画像では、この問題はありません。

例 (Clojure で、ただし JDK 1.6 で Java API を使用)

wget http://static4.businessinsider.com/image/505c5461ecad047a3500002b-772-598/share-of-income-to-labor.png
...
2012-09-21 13:14:54 (370 KB/s) - `share-of-income-to-labor.png.1' saved [64754/64754]

user=> (.exists (java.io.File. "share-of-income-to-labor.png"))
true

user=> (javax.imageio.ImageIO/read (java.io.File. "share-of-income-to-labor.png"))
javax.imageio.IIOException: Error reading PNG image data (NO_SOURCE_FILE:0)

user=> (System/getProperty "java.version")
"1.6.0_35"
于 2012-09-21T17:22:49.503 に答える
0

唯一のオプションは、エラーをキャッチして、イメージが破損していたことを報告することです。

于 2012-09-21T16:10:58.030 に答える
0

ヒープサイズを徐々に増やしてみてください。それでもエラーが発生する場合は、メモリ リークが原因である可能性があります。これを参照してください。 http://jadroider.blogspot.com/2012/07/java-how-to-change-jvm-memory-settings.html

于 2012-09-21T16:40:27.173 に答える