Yes, JavaFX 16 uses VS 2019, but those libraries should be distributed
as part of the JavaFX 16 bundle. It's possible we have a bug in
NaativeLibLoader where they are not getting loaded.
-- Kevin
On 4/28/2021 6:46 AM, thevenet.f...@free.fr wrote:
Hi,
I am facing an issue where, after updating to JFX 16, an application fail to
start on Windows machines where the
MS Visual C++ 2019 redistributable libraries are not installed, with the
following exception:
java.lang.RuntimeException: java.lang.UnsatisfiedLinkError:
C:\binjr-3.0.2-SNAPSHOT_windows-amd64\runtime\bin\glass.dll: Can't find
dependent libraries
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.startup(Unknown
Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(Unknown
Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(Unknown
Source)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(Unknown
Source)
at
javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown
Source)
at
javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown
Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.UnsatisfiedLinkError:
C:\binjr-3.0.2-SNAPSHOT_windows-amd64\runtime\bin\glass.dll: Can't find
dependent libraries
at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(Unknown
Source)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(Unknown Source)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(Unknown Source)
at java.base/jdk.internal.loader.NativeLibraries.findFromPaths(Unknown Source)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(Unknown Source)
at java.base/java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.base/java.lang.Runtime.loadLibrary0(Unknown Source)
at java.base/java.lang.System.loadLibrary(Unknown Source)
at
javafx.graphics/com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(Unknown
Source)
at javafx.graphics/com.sun.glass.utils.NativeLibLoader.loadLibrary(Unknown
Source)
at javafx.graphics/com.sun.glass.ui.Application.loadNativeLibrary(Unknown
Source)
at javafx.graphics/com.sun.glass.ui.Application.loadNativeLibrary(Unknown
Source)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.access$000(Unknown
Source)
at javafx.graphics/com.sun.glass.ui.win.WinApplication$1.run(Unknown Source)
at javafx.graphics/com.sun.glass.ui.win.WinApplication$1.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.<clinit>(Unknown Source)
at
javafx.graphics/com.sun.glass.ui.win.WinPlatformFactory.createApplication(Unknown
Source)
at
javafx.graphics/com.sun.glass.ui.win.WinPlatformFactory.createApplication(Unknown
Source)
at javafx.graphics/com.sun.glass.ui.Application.run(Unknown Source)
... 7 more
As previously mentioned, the above exception is not thrown on machines where
the Visual C++ 2019
redistributable is installed.
In more details, the application's package is built using OpenJDK 16 and
OpenJFX 16 (x64).
I use jlink to build a runtime image that includes the javaFX modules
(downloaded from Gluon[1]), and
launch the application from the classpath using this image (as the app itself
is not modular).
An important thing to note, is that the issue does not arise when building the
package using the same
process using JavaFX 15.
Also,I noticed that the issue does not arise either when I launch the
application using the openJDK 16
built by Azul that includes JavaFX[2]. From there I tried substituting the
"glass.dll" in my jlink-built runtime
for the onein the Azul distro, and, again, this works.
Using Dependancy Walker, I then confirmed that "glass.dll" as present in
binairies linked on openjfx.io have
a dependency to VCRUNTIME140_1.DLL whereas the one built by Azul does not.
(Please note the "_1" above; to be quite clear both versions of the dll have
dependency to vcruntime140.dll,
which is bundled with openJDK on Windows, but not vcruntime140_1.dll)
To be quite honest, I'm not sure this problem has its root in JavaFX's source
code or if it is specific to the JavaFX
binaries built by Gluon or the way I build my application package.
Thanks in advance for your insights.
-- Fred
[1] [ https://gluonhq.com/download/javafx-16-jmods-windows/ |
https://gluonhq.com/download/javafx-16-jmods-windows/ ]
[2] [
https://www.azul.com/downloads/zulu-community/?version=java-16-sts&os=windows&architecture=x86-64-bit&package=jdk-fx
|
https://www.azul.com/downloads/zulu-community/?version=java-16-sts&os=windows&architecture=x86-64-bit&package=jdk-fx
]