#292 Preparing for Java 9 compatibility + general clean-up

This commit is contained in:
Harald Kuhr
2016-11-15 21:40:59 +01:00
parent 37e6d31ed9
commit ab13084f44
19 changed files with 89 additions and 154 deletions
@@ -29,6 +29,7 @@
package com.twelvemonkeys.imageio.plugins.thumbsdb;
import com.twelvemonkeys.imageio.spi.ImageReaderSpiBase;
import com.twelvemonkeys.imageio.util.IIOUtil;
import com.twelvemonkeys.io.ole2.CompoundDocument;
import javax.imageio.ImageReader;
@@ -40,6 +41,8 @@ import java.io.IOException;
import java.util.Iterator;
import java.util.Locale;
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
/**
* ThumbsDBImageReaderSpi
* <p/>
@@ -75,32 +78,21 @@ public final class ThumbsDBImageReaderSpi extends ImageReaderSpiBase {
private void maybeInitJPEGProvider() {
// NOTE: Can't do this from constructor, as ImageIO itself is not initialized yet,
// and the lookup below will produce a NPE..
// TODO: A better approach...
// - Could have a list with known working JPEG decoders?
// - System property?
// - Class path lookup of properties file with reader?
// This way we could deregister immediately
if (jpegProvider == null) {
ImageReaderSpi provider = null;
try {
Iterator<ImageReaderSpi> providers = getJPEGProviders();
// Prefer the one we know
ImageReaderSpi provider = lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
while (providers.hasNext()) {
provider = providers.next();
// Prefer the one we know
if ("Sun Microsystems, Inc.".equals(provider.getVendorName())) {
break;
}
if (provider == null) {
try {
provider = getJPEGProviders().next();
}
catch (Exception ignore) {
// It's pretty safe to assume there's always a JPEG reader out there
// In any case, we deregister the provider if there isn't one
IIORegistry.getDefaultInstance().deregisterServiceProvider(this, ImageReaderSpi.class);
}
}
catch (Exception ignore) {
// It's pretty safe to assume there's always a JPEG reader out there
// In any case, we deregister the provider if there isn't one
IIORegistry.getDefaultInstance().deregisterServiceProvider(this, ImageReaderSpi.class);
}
jpegProvider = provider;
}
}