在罐子jai_imageio.jar有類:添加從罐子/刪除的ImageReader到的ImageIO,註冊表
com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader
所以我添加jai_imageio.jar(和jai_core.jar,jai_codec.jar)到類路徑中。但是這個類似乎不能用於ImageIO。所以這個代碼:
ImageIO.scanForPlugins();
IIORegistry.getDefaultInstance().registerApplicationClasspathSpis();
Iterator<ImageReader> ir = ImageIO.getImageReadersByFormatName("jpeg");
while(ir.hasNext()) {
ImageReader r = ir.next();
System.out.println("can read raster: " + r.canReadRaster());
System.out.println(r);
}
結果輸出如下:機器的
can read raster: true
[email protected]
99%。但一臺機器上它導致這樣的輸出:
Can read raster: false
[email protected]a1
Can read raster: true
[email protected]
它爲什麼會發生?我應該做更多,因爲只需將帶有ImageIO插件的jar放在classpath中?我能以某種方式從ImageIO-Registry中卸載ImageReader嗎?
背景
其實我的問題是,一些外部不可改變的代碼應該使用來自ImageIO的註冊表第一的ImageReader讀取光柵。但不幸的是,在一臺PC上,第一個ImageReader是CLibJPEGImageReader。 JDK和classpath是完全相同的,因此CLibJPEGImageReader應該總是在註冊表中,如果在類路徑中添加帶插件的jar就足以使其對於ImageIO可見。