2016-11-09 156 views
0

我有一個Java程序,我添加了JAI Image I/O以支持TIFF圖像格式。需要安裝JAI Image I/O包。 https://java.net/projects/jai-imageio/

A)什麼是工作的罰款

這個程序完全運行在Eclipse環境這個代碼打印類名(我想這是一個負責)和返回true即TIFF圖像作家被註冊:

System.out.println(TIFFImageWriterSpi.class); 
    ImageIO.scanForPlugins(); 
    Iterator<ImageWriter> it = ImageIO.getImageWritersByFormatName("tiff"); 
    System.out.println(it.hasNext()); 

A)我的問題

打包項目使用gradle。產生的JAR包含負責TIFF處理類:

 com\github\jaiimageio\impl\plugins\tiff\TIFFImageWriter.class 
    com\github\jaiimageio\impl\plugins\tiff\TIFFImageWriterSpi.class 

不幸的是,執行時相同的代碼,則it.hasNext()返回false,也就是說,它使用的ImageIO未能寄存器TIFF作家 .scanForPlugins(); * 和becasue這也是本拋出異常的:

Need to install JAI Image I/O package. https://java.net/projects/jai-imageio/ 

雖然JAI圖像I/O已經在類路徑(否則在Eclipse運行會失敗)

+0

只是想知道,爲什麼你會選擇TIFF而不是其他圖像格式? – kevto

+0

'ImageIO.scanForPlugins()'使用'ServiceLoader'和JAR文件[Service Provider]掃描類路徑上的插件(http://docs.oracle.com/javase/7/docs/technotes/guides/jar/ jar.html#Service_Provider)機制。僅編譯類是不夠的。你的JAR中是否還有相應的服務提供者配置文件(即'/ META-INF/services/javax.imageio.spi.ImageWriterSpi')?如果你這樣做,它是否包含一行說'com.github.jaiimageio.impl.plugins.tiff.TIFFImageWriterSpi'? – haraldK

回答

0

使用此代碼:

IIORegistry.getDefaultInstance().registerServiceProvider(
      new TIFFImageWriterSpi(), ImageWriterSpi.class); 

能夠手動註冊的ImageWriterSpi任何或的ImageReaderSpi即使當ImageIO.scanForPlugins();失敗。