Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UnsatisfiedLinkError when running the program as a native app on Windows #146

Closed
Dansoftowner opened this issue Jun 25, 2021 · 1 comment
Labels
bug Something isn't working

Comments

@Dansoftowner
Copy link
Owner

I noticed an error in the native Boomega release. The interesting thing was that the app worked on other computers but not on mine.

The gui window didn't work:
image

And the error was:

java.lang.UnsatisfiedLinkError: 'boolean com.sun.javafx.font.directwrite.OS.CoInitializeEx(int)'
        at javafx.graphics/com.sun.javafx.font.directwrite.OS.CoInitializeEx(Native Method)
        at javafx.graphics/com.sun.javafx.font.directwrite.DWFactory.getWICFactory(Unknown Source)
        at javafx.graphics/com.sun.javafx.font.directwrite.DWGlyph.createBitmap(Unknown Source)
        at javafx.graphics/com.sun.javafx.font.directwrite.DWGlyph.getCachedBitmap(Unknown Source)
        at javafx.graphics/com.sun.javafx.font.directwrite.DWGlyph.getD2DMask(Unknown Source)
        at javafx.graphics/com.sun.javafx.font.directwrite.DWGlyph.getPixelData(Unknown Source)
        at javafx.graphics/com.sun.prism.impl.GlyphCache.getCachedGlyph(Unknown Source)
        at javafx.graphics/com.sun.prism.impl.GlyphCache.render(Unknown Source)
        at javafx.graphics/com.sun.prism.impl.ps.BaseShaderGraphics.drawString(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGText.renderText(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGText.renderContent2D(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGShape.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NodeEffectInput.getImageDataForBoundedNode(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NodeEffectInput.filter(Unknown Source)
        at javafx.graphics/com.sun.scenario.effect.FilterEffect.filter(Unknown Source)
        at javafx.graphics/com.sun.scenario.effect.Offset.filter(Unknown Source)
        at javafx.graphics/com.sun.scenario.effect.Merge.filter(Unknown Source)
        at javafx.graphics/com.sun.scenario.effect.DelegateEffect.filter(Unknown Source)
        at javafx.graphics/com.sun.scenario.effect.impl.prism.PrEffectHelper.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.EffectFilter.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.renderEffect(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.renderForClip(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.renderRectClip(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.renderClip(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.ViewPainter.doPaint(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.ViewPainter.paintImpl(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.PresentingPainter.run(Unknown Source)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.RenderJob.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)

Then I enabled more verbose logging by -Djavafx.verbose=true and -Dprism.verbose=true.
And I've got interesting results.

I noticed that most of the DLLs weren't loaded from the local java runtime but from the system java distribution (btw a ZuluFX 11) that was located on the PATH.

Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-console-l1-1-0.dll from java.library.path
System.loadLibrary(api-ms-win-core-console-l1-2-0) succeeded
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-datetime-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-debug-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-errorhandling-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-file-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-file-l1-2-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-file-l2-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-handle-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-heap-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-interlocked-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-libraryloader-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-localization-l1-2-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-memory-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-namedpipe-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-processenvironment-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-processthreads-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-processthreads-l1-1-1.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-profile-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-rtlsupport-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-string-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-synch-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-synch-l1-2-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-sysinfo-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-timezone-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-core-util-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-conio-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-convert-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-environment-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-filesystem-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-heap-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-locale-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-math-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-multibyte-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-private-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-process-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-runtime-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-stdio-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-string-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-time-l1-1-0.dll from java.library.path
Loaded C:\Program Files\Java\zulu11.37.19-ca-fx-jdk11.0.6-win_x64\bin\api-ms-win-crt-utility-l1-1-0.dll from java.library.path
Loaded C:\WINDOWS\system32\ucrtbase.dll from java.library.path
Loaded C:\WINDOWS\system32\vcruntime140.dll from java.library.path
Loaded C:\WINDOWS\system32\vcruntime140_1.dll from java.library.path
Loaded C:\WINDOWS\system32\msvcp140.dll from java.library.path

After I removed the Java 11 distribution from my PATH, the app loaded the DLLs from its local runtime and worked 100% fine.

System.loadLibrary(api-ms-win-core-console-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-console-l1-2-0) succeeded
System.loadLibrary(api-ms-win-core-datetime-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-debug-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-errorhandling-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-file-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-file-l1-2-0) succeeded
System.loadLibrary(api-ms-win-core-file-l2-1-0) succeeded
System.loadLibrary(api-ms-win-core-handle-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-heap-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-interlocked-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-libraryloader-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-localization-l1-2-0) succeeded
System.loadLibrary(api-ms-win-core-memory-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-namedpipe-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-processenvironment-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-processthreads-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-processthreads-l1-1-1) succeeded
System.loadLibrary(api-ms-win-core-profile-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-rtlsupport-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-string-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-synch-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-synch-l1-2-0) succeeded
System.loadLibrary(api-ms-win-core-sysinfo-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-timezone-l1-1-0) succeeded
System.loadLibrary(api-ms-win-core-util-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-conio-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-convert-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-environment-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-filesystem-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-heap-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-locale-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-math-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-multibyte-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-private-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-process-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-runtime-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-stdio-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-string-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-time-l1-1-0) succeeded
System.loadLibrary(api-ms-win-crt-utility-l1-1-0) succeeded
Loaded C:\WINDOWS\system32\ucrtbase.dll from java.library.path
Loaded C:\WINDOWS\system32\vcruntime140.dll from java.library.path
Loaded C:\WINDOWS\system32\vcruntime140_1.dll from java.library.path
Loaded C:\WINDOWS\system32\msvcp140.dll from java.library.path
@Dansoftowner
Copy link
Owner Author

Dansoftowner commented Jun 25, 2021

Fixed by prefixing the java.library.path with the running java runtime path.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant