Created
March 22, 2022 19:25
-
-
Save gamma/193d336483eabeee634cb624d876d29e to your computer and use it in GitHub Desktop.
Adoptium JVM Docker Crash with OpenJPEG2k / JNR JFFI
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.awt.image.BufferedImage; | |
import java.io.File; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.net.URL; | |
import java.net.URLClassLoader; | |
import java.util.Arrays; | |
import javax.imageio.ImageIO; | |
import javax.imageio.spi.IIORegistry; | |
class ImageReadTest { | |
public static void main(String[] args) throws Exception { | |
URL[] urls = Arrays.asList( | |
new File("asm.jar").toURI().toURL(), | |
new File("imageio-openjpeg.jar").toURI().toURL(), | |
new File("jffi-native.jar").toURI().toURL(), | |
new File("jffi.jar").toURI().toURL(), | |
new File("jnr-ffi.jar").toURI().toURL(), | |
new File("jpeg2000.jar").toURI().toURL(), | |
new File("slf4j-api.jar").toURI().toURL() | |
).toArray( new URL[]{} ); | |
// path to native libs. FIXME: Update hte path to your system | |
System.setProperty( "jnr.ffi.library.path", new File("openjpeg/linux").getAbsolutePath() ); | |
System.out.println( "Check if the follwing path corresponds to your system: " + System.getProperty( "jnr.ffi.library.path" ) ); | |
// load the openjpeg classes using classloader to resemble our custom setup | |
ClassLoader loader = new URLClassLoader(urls); | |
Class<?> OpenJp2ImageReaderSpi = loader.loadClass( "de.digitalcollections.openjpeg.imageio.OpenJp2ImageReaderSpi" ); | |
// register in ImageIO | |
IIORegistry registry = IIORegistry.getDefaultInstance(); | |
registry.registerServiceProvider( OpenJp2ImageReaderSpi.getDeclaredConstructor().newInstance() ); | |
// test if it is working | |
try (InputStream testLogo = ImageReadTest.class.getResourceAsStream( "verification.jp2" ) ){ | |
BufferedImage testImage = ImageIO.read( testLogo ); | |
if( testImage == null ) { | |
throw new IOException( "OpenJpeg library not initalized correctly, Jpeg2000 images will not be displayed." ); | |
} | |
System.out.println( "OpenJpeg library initalized correctly, Jpeg2000 images will be displayed." ); | |
} catch (Throwable e) { | |
e.printStackTrace(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment