I get UnsatisfiedLinkError
when trying to reach dll. This happens if bin
folder is located in folder with Japanese name, system language and locale are set to Japan. I need to fix this.
In English environment and app located in Japanese named folder app does not run at all (fix unnecessary). In English environment and app located in English named folder app works fine.
Seems like NativeLibrary.load
can not handle Japanese characters in library path.
Is this a bug in Java: https://bugs.openjdk.org/browse/JDK-8195129?
Error in console:
Exception in thread "main-FPSAWTAnimator-Timer0" java.lang.UnsatisfiedLinkError:
F:\Test\テスト\myApp\bin\jre\bin\jpeg.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1845)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter$1.run(JPEGImageWriter.java:180)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter$1.run(JPEGImageWriter.java:178)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.<clinit>(JPEGImageWriter.java:177)
at com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi.createWriterInstance(JPEGImageWriterSpi.java:96)
at javax.imageio.spi.ImageWriterSpi.createWriterInstance(ImageWriterSpi.java:351)
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:843)
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:827)
at sun.awt.datatransfer.DataTransferer.imageToStandardBytesImpl(DataTransferer.java:2203)
at sun.awt.datatransfer.DataTransferer.imageToStandardBytes(DataTransferer.java:2145)
at sun.awt.windows.WDataTransferer.imageToPlatformBytes(WDataTransferer.java:352)
at sun.awt.datatransfer.DataTransferer.translateTransferable(DataTransferer.java:1223)
at sun.awt.windows.WDataTransferer.translateTransferable(WDataTransferer.java:219)
at sun.awt.windows.WClipboard.setContentsNative(WClipboard.java:83)
at sun.awt.datatransfer.SunClipboard.setContents(SunClipboard.java:106)
at myPath.utils.c.<init>(Unknown Source)
at myPath.opengl.base.BaseViewer.renderSnapshot(Unknown Source)
at myPath.opengl.base.BaseViewer.access$1100(Unknown Source)
at myPath.opengl.base.e.a(Unknown Source)
at myPath.opengl.base.BaseViewer.render(Unknown Source)
at myPath.opengl.base.BaseViewer.display(Unknown Source)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:665)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:649)
at com.jogamp.opengl.swt.GLCanvas$2.run(GLCanvas.java:153)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1119)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:994)
at com.jogamp.opengl.swt.GLCanvas$3.run(GLCanvas.java:165)
at com.jogamp.opengl.swt.GLCanvas.runInGLThread(GLCanvas.java:970)
at com.jogamp.opengl.swt.GLCanvas.display(GLCanvas.java:682)
at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:75)
at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:416)
at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:172)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
Paths:
F:\Test\テスト\myApp\bin\jre\bin\jpeg.dll
F:\Test\テスト\myApp\bin\appStarter.exe
Thanks for any hint!
Seems like the answer is here. sybase.allow.native.lib
should be allowed:
System.setProperty("sybase.allow.native.lib", "true");
I need to run proper tests, but for now it seems to work.