2012-08-16 39 views
1

在罐子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可見。

回答