On 30.09.2023 15:05, Kevin Rushforth wrote:
The JavaFX native files were deliberately moved from bin to bin/javafx in JavaFX 19. See
JDK-8281089 [1]. Using jlink with the JavaFX jmods will correctly put those libraries in
bin/javafx. I suspect that the JDK build procedure Azul and BellSoft use is not doing that.
-- Kevin
[1] https://bugs.openjdk.org/browse/JDK-8281089
Thank you very much, Kevin!
Not having accounts at Azul and BellSoft, there is no means to inform them, unfortunately. (Maybe
others on the list who have accounts could do so.)
In the meantime copying bin to bin/javafx is an easy-enough local "solution". :)
---rony
On 9/30/2023 4:40 AM, Rony G. Flatscher wrote:
Added the subdir "bin/javafx" then copied all files of "bin" into it after
which everything works.
Both OpenJDK 21 versions (Azul, Bellsouth) were downloaded as zip-archives, unzipped and
JAVA_HOME set accordingly, which has been working for all past versions. It seems that somewhere
a wrong configuration sneaked into 21 causing the loading of the dlls from the wrong,
non-existing subdirectory "bin/javafx".
---rony
On 29.09.2023 23:32, Rony G. Flatscher wrote:
Also, in this case JAVA_HOME is set as:
F:\work\svn\bsf4oorexx\branches\850\bsf4oorexx\samples\JavaFX>set j
JAVA_HOME=C:\Program Files\BellSoft\jdk-21-full
---rony
On 29.09.2023 23:29, Rony G. Flatscher wrote:
Sorry, had to go to an event in between.
On 29.09.2023 15:35, Kevin Rushforth wrote:
It generally doesn't matter where the Microsoft DLLs are loaded from. What I don't see in your
log is the loading of javafx_font.dll. That, and the other JavaFX libraries, are the important
ones.
This is interesting as well, here the occurrences of javafx_font.dll:
F:\work\svn\bsf4oorexx\branches\850\bsf4oorexx\samples\JavaFX>dir
C:\javafx_font.dll /s
Volume in drive C is root_c
Volume Serial Number is 2AF2-88BA
Directory of C:\Program Files\azul\zulu21_jdk21.0.0\bin
12.09.2023 14:02 77 864 javafx_font.dll
1 File(s) 77 864 bytes
Directory of C:\Program Files\BellSoft\jdk-18.0.1.1-full\bin
28.05.2022 04:41 76 992 javafx_font.dll
1 File(s) 76 992 bytes
Directory of C:\Program Files\BellSoft\jdk-21-full\bin
20.09.2023 01:11 77 504 javafx_font.dll
1 File(s) 77 504 bytes
Directory of C:\Program Files\BellSoft\LibericaJDK-17-Full\bin
12.01.2023 21:09 76 992 javafx_font.dll
1 File(s) 76 992 bytes
Directory of C:\Program Files (x86)\BellSoft\jdk8u312-full\jre\bin
16.10.2021 20:54 61 152 javafx_font.dll
1 File(s) 61 152 bytes
Directory of C:\Program Files (x86)\BellSoft\LibericaJDK-17-Full\bin
28.05.2022 02:52 62 144 javafx_font.dll
1 File(s) 62 144 bytes
Directory of C:\Program Files (x86)\BellSoft\LibericaJDK-8-Full\jre\bin
27.05.2022 22:59 61 632 javafx_font.dll
1 File(s) 61 632 bytes
Directory of
C:\Users\Administrator\.IdeaIC2019.3\system\tmp\patch-update\jre\bin
16.04.2020 17:59 80 408 javafx_font.dll
1 File(s) 80 408 bytes
Directory of
C:\Users\Administrator\AppData\Local\JetBrains\IdeaIC2020.1\tmp\patch-update\jre\bin
24.09.2020 16:30 80 408 javafx_font.dll
1 File(s) 80 408 bytes
Directory of C:\Users\Administrator\AppData\Local\SceneBuilder\runtime\bin
05.06.2018 13:48 58 792 javafx_font.dll
1 File(s) 58 792 bytes
Total Files Listed:
10 File(s) 713 888 bytes
0 Dir(s) 34 872 254 464 bytes free
Here here the relevant trace:
... cut ...
WARNING: java.lang.UnsatisfiedLinkError: Can't load library: C:\Program
Files\BellSoft\jdk-21-full\bin\javafx\msvcp140_2.dll
Loaded C:\Program Files\BellSoft\LibericaJDK-17-Full\bin\msvcp140_2.dll
from java.library.path
WARNING: java.lang.UnsatisfiedLinkError: Can't load library: C:\Program
Files\BellSoft\jdk-21-full\bin\javafx\prism_d3d.dll
Loaded C:\Program Files\BellSoft\LibericaJDK-17-Full\bin\prism_d3d.dll from
java.library.path
JavaFX: using com.sun.javafx.tk.quantum.QuantumToolkit
WARNING: java.lang.UnsatisfiedLinkError: Can't load library: C:\Program
Files\BellSoft\jdk-21-full\bin\javafx\glass.dll
Loaded C:\Program Files\BellSoft\LibericaJDK-17-Full\bin\glass.dll from
java.library.path
WARNING: java.lang.UnsatisfiedLinkError: Can't load library: C:\Program
Files\BellSoft\jdk-21-full\bin\javafx\javafx_font.dll
Loaded C:\Program Files\BellSoft\LibericaJDK-17-Full\bin\javafx_font.dll
from java.library.path
Exception in Application start method
Exception in thread "JavaFX Application Thread"
java.lang.UnsatisfiedLinkError:
'java.lang.String
com.sun.javafx.font.directwrite.DWFactory.regReadFontLink(java.
lang.String)'
at
javafx.graphics/com.sun.javafx.font.directwrite.DWFactory.regReadFontLink(Native
Method)
at
javafx.graphics/com.sun.javafx.font.directwrite.DWFactory.getFallbacks(DWFactory.java:166)
at
javafx.graphics/com.sun.javafx.font.LogicalFont.getLinkedFonts(LogicalFont.java:214)
at
javafx.graphics/com.sun.javafx.font.LogicalFont.getNumSlots(LogicalFont.java:223)
at
javafx.graphics/com.sun.javafx.font.CompositeGlyphMapper.<init>(CompositeGlyphMapper.java:62)
at
javafx.graphics/com.sun.javafx.font.LogicalFont.getGlyphMapper(LogicalFont.java:439)
at
javafx.graphics/com.sun.javafx.text.GlyphLayout.breakRuns(GlyphLayout.java:229)
at
javafx.graphics/com.sun.javafx.text.PrismTextLayout.buildRuns(PrismTextLayout.java:819)
at
javafx.graphics/com.sun.javafx.text.PrismTextLayout.layout(PrismTextLayout.java:1070)
at
javafx.graphics/com.sun.javafx.text.PrismTextLayout.ensureLayout(PrismTextLayout.java:230)
at
javafx.graphics/com.sun.javafx.text.PrismTextLayout.getBounds(PrismTextLayout.java:256)
at
javafx.controls/com.sun.javafx.scene.control.skin.Utils.computeTextWidth(Utils.java:129)
at
javafx.controls/javafx.scene.control.skin.LabeledSkinBase.computeMinLabeledPartWidth(LabeledSkinBase.java:809)
at
javafx.controls/javafx.scene.control.skin.LabeledSkinBase.computeMinWidth(LabeledSkinBase.java:306)
at
javafx.controls/javafx.scene.control.Control.computeMinWidth(Control.java:504)
at javafx.graphics/javafx.scene.Parent.minWidth(Parent.java:1049)
at
javafx.graphics/javafx.scene.layout.Region.minWidth(Region.java:1500)
at
javafx.graphics/javafx.scene.layout.Region.computeChildPrefAreaWidth(Region.java:1959)
at
javafx.graphics/javafx.scene.layout.AnchorPane.computeChildWidth(AnchorPane.java:344)
at
javafx.graphics/javafx.scene.layout.AnchorPane.layoutChildren(AnchorPane.java:380)
at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1208)
at javafx.graphics/javafx.scene.Scene.doLayoutPass(Scene.java:594)
at
javafx.graphics/javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2600)
at
javafx.graphics/com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Toolkit.java:401)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at
javafx.graphics/com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:400)
at
javafx.graphics/com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:430)
at
javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:592)
at
javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:572)
at
javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:565)
at
javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:352)
at
javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at
javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at
javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:185)
at java.base/java.lang.Thread.run(Thread.java:1583)
Here the PATH environment variable in this case (no jdk17):
PATH=C:\Program
Files\BellSoft\jdk-21-full\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;e:\rony\tools;e:\vslick\win;C:\Program
Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files\Microsoft
DNX\Dnvm\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance
Toolkit\;C:\Program
Files\gs\gs9.22\lib;C:\Program
Files\gs\gs9.22\bin;C:\WINDOWS\System32\OpenSSH\;C:\Program
Files (x86)\PuTTY\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common
Files\Intel\WirelessCommon\;C:\Program Files\TortoiseSVN\bin;C:\Program
Files\TortoiseHg\;C:\Program Files\TortoiseGit\bin;C:\Program
Files\dotnet\;C:\Program
Files (x86)\AOMEI\AOMEI Backupper\7.1.2;C:\Program Files\Git\cmd;C:\Program
Files\BSF4ooRexx850;c:\Program Files (x86)\Intel\Intel(R) Management Engine
Components\DAL;c:\Program Files\Intel\Intel(R) Management Engine
Components\DAL;C:\Program
Files\oorexx;C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Scripts\;C:\Users\Administrator\AppData\Local\Programs\Python\Python311\;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;C:\Program
Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\
So JDK17 is not on PATH, but Java/JDK 21 finds JDK17, maybe from the registry entry for
"Computer\HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JDK\17.0.3" (only entry), having an entry of
"JavaHome" with the value of "C:\Program Files\BellSoft\LibericaJDK-17-Full".
Also key "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JDK\17.0.3\MSI" having an entry for
"INSTALLDIR" of "C:\Program Files\BellSoft\LibericaJDK-17-Full\".
So it seems that JDK21's java.exe will not find the dlls in the non-existing
"*\jdk-21-full\javafx\" directory and eventually resorting to the registry entry to lookup JDK 17.
---rony
On 9/29/2023 6:30 AM, Rony G. Flatscher wrote:
On 29.09.2023 14:53, Kevin Rushforth wrote:
This is a new native method (actually moved from another class) in JavaFX 21. This is very
likely due to a mismatch between the native library and the Java classes. I suspect you have
a directory in your PATH that is picking up an old javafx_font.dll library. Run your program
with "-Djavafx.verbose=true" to see where the library is loaded from.
Thank you, this is the output:
WARNING: java.lang.UnsatisfiedLinkError: Can't load library: C:\Program
Files\BellSoft\jdk-21-full\bin\javafx\api-ms-win-core-console-l1-1-0.dll
Loaded C:\Program Files\TortoiseGit\bin\api-ms-win-core-console-l1-1-0.dll
from
java.library.path
WARNING: java.lang.UnsatisfiedLinkError: Can't load library: C:\Program
Files\BellSoft\jdk-21-full\bin\javafx\api-ms-win-core-console-l1-2-0.dll
System.loadLibrary(api-ms-win-core-console-l1-2-0) succeeded
WARNING: java.lang.UnsatisfiedLinkError: Can't load library: C:\Program
Files\BellSoft\jdk-21-full\bin\javafx\api-ms-win-core-datetime-l1-1-0.dll
Loaded C:\Program Files\TortoiseGit\bin\api-ms-win-core-datetime-l1-1-0.dll
from
java.library.path
WARNING: java.lang.UnsatisfiedLinkError: Can't load library: C:\Program
Files\BellSoft\jdk-21-full\bin\javafx\api-ms-win-core-debug-l1-1-0.dll
Loaded C:\Program Files\TortoiseGit\bin\api-ms-win-core-debug-l1-1-0.dll
from
java.library.path
WARNING: java.lang.UnsatisfiedLinkError: Can't load library: C:\Program
Files\BellSoft\jdk-21-full\bin\javafx\api-ms-win-core-errorhandling-l1-1-0.dll
Loaded C:\Program
Files\TortoiseGit\bin\api-ms-win-core-errorhandling-l1-1-0.dll from
java.library.path
WARNING: java.lang.UnsatisfiedLinkError: Can't load library: C:\Program
Files\BellSoft\jdk-21-full\bin\javafx\api-ms-win-core-file-l1-1-0.dll
Loaded C:\Program Files\TortoiseGit\bin\api-ms-win-core-file-l1-1-0.dll from
java.library.path
... cut ...
So indeed, it seems to be picking up those dlls from TortoiseGit.
The dlls are there:
C:\Program Files\BellSoft\jdk-21-full\bin
Directory of C:\Program Files\BellSoft\jdk-21-full\bin
19.09.2023 17:09 22 008 api-ms-win-core-console-l1-1-0.dll
19.09.2023 17:09 21 992 api-ms-win-core-console-l1-2-0.dll
19.09.2023 17:09 22 024 api-ms-win-core-datetime-l1-1-0.dll
19.09.2023 17:09 22 008 api-ms-win-core-debug-l1-1-0.dll
19.09.2023 17:09 22 008 api-ms-win-core-errorhandling-l1-1-0.dll
19.09.2023 17:09 22 008 api-ms-win-core-fibers-l1-1-0.dll
19.09.2023 17:09 26 120 api-ms-win-core-file-l1-1-0.dll
19.09.2023 17:09 22 024 api-ms-win-core-file-l1-2-0.dll
19.09.2023 17:09 22 024 api-ms-win-core-file-l2-1-0.dll
19.09.2023 17:09 22 024 api-ms-win-core-handle-l1-1-0.dll
19.09.2023 17:09 21 984 api-ms-win-core-heap-l1-1-0.dll
19.09.2023 17:09 22 008 api-ms-win-core-interlocked-l1-1-0.dll
19.09.2023 17:09 22 024 api-ms-win-core-libraryloader-l1-1-0.dll
19.09.2023 17:09 22 008 api-ms-win-core-localization-l1-2-0.dll
19.09.2023 17:09 21 984 api-ms-win-core-memory-l1-1-0.dll
19.09.2023 17:09 21 984 api-ms-win-core-namedpipe-l1-1-0.dll
19.09.2023 17:09 22 008
api-ms-win-core-processenvironment-l1-1-0.dll
19.09.2023 17:09 22 024
api-ms-win-core-processthreads-l1-1-0.dll
19.09.2023 17:09 21 984
api-ms-win-core-processthreads-l1-1-1.dll
19.09.2023 17:09 21 984 api-ms-win-core-profile-l1-1-0.dll
19.09.2023 17:09 21 984 api-ms-win-core-rtlsupport-l1-1-0.dll
19.09.2023 17:09 22 024 api-ms-win-core-string-l1-1-0.dll
19.09.2023 17:09 22 024 api-ms-win-core-synch-l1-1-0.dll
19.09.2023 17:09 21 968 api-ms-win-core-synch-l1-2-0.dll
19.09.2023 17:09 22 024 api-ms-win-core-sysinfo-l1-1-0.dll
19.09.2023 17:09 22 024 api-ms-win-core-timezone-l1-1-0.dll
19.09.2023 17:09 21 984 api-ms-win-core-util-l1-1-0.dll
19.09.2023 17:09 22 024 api-ms-win-crt-conio-l1-1-0.dll
19.09.2023 17:09 26 104 api-ms-win-crt-convert-l1-1-0.dll
19.09.2023 17:09 21 984 api-ms-win-crt-environment-l1-1-0.dll
19.09.2023 17:09 22 024 api-ms-win-crt-filesystem-l1-1-0.dll
19.09.2023 17:09 21 984 api-ms-win-crt-heap-l1-1-0.dll
19.09.2023 17:09 22 008 api-ms-win-crt-locale-l1-1-0.dll
19.09.2023 17:09 30 176 api-ms-win-crt-math-l1-1-0.dll
19.09.2023 17:09 30 216 api-ms-win-crt-multibyte-l1-1-0.dll
19.09.2023 17:09 75 232 api-ms-win-crt-private-l1-1-0.dll
19.09.2023 17:09 22 008 api-ms-win-crt-process-l1-1-0.dll
19.09.2023 17:09 26 080 api-ms-win-crt-runtime-l1-1-0.dll
19.09.2023 17:09 26 120 api-ms-win-crt-stdio-l1-1-0.dll
19.09.2023 17:09 26 120 api-ms-win-crt-string-l1-1-0.dll
19.09.2023 17:09 21 984 api-ms-win-crt-time-l1-1-0.dll
19.09.2023 17:09 22 024 api-ms-win-crt-utility-l1-1-0.dll
but the look-up is using "C:\Program Files\BellSoft\jdk-21-full\bin\javafx\..."
The Windows PATH starts out with:
PATH=C:\Program Files\BellSoft\jdk-21-full\bin;... cut ...
---rony
On 9/29/2023 5:06 AM, Rony G. Flatscher wrote:
Downloaded the 64-bit OpenJDK21 package for Windows that include JavaFX from Azul ("FX")
and Bellsouth ("full").
Both packages cause the following error:
Exception in Application start method
Exception in thread "JavaFX Application Thread"
java.lang.UnsatisfiedLinkError:
'java.lang.String com.sun.javafx.font.direct
write.DWFactory.regReadFontLink(java.lang.String)'
at
javafx.graphics/com.sun.javafx.font.directwrite.DWFactory.regReadFontLink(Native
Method)
at
javafx.graphics/com.sun.javafx.font.directwrite.DWFactory.getFallbacks(DWFactory.java:166)
at
javafx.graphics/com.sun.javafx.font.LogicalFont.getLinkedFonts(LogicalFont.java:214)
at
javafx.graphics/com.sun.javafx.font.LogicalFont.getNumSlots(LogicalFont.java:223)
at
javafx.graphics/com.sun.javafx.font.CompositeGlyphMapper.<init>(CompositeGlyphMapper.java:62)
at
javafx.graphics/com.sun.javafx.font.LogicalFont.getGlyphMapper(LogicalFont.java:439)
at
javafx.graphics/com.sun.javafx.text.GlyphLayout.breakRuns(GlyphLayout.java:229)
at
javafx.graphics/com.sun.javafx.text.PrismTextLayout.buildRuns(PrismTextLayout.java:819)
at
javafx.graphics/com.sun.javafx.text.PrismTextLayout.layout(PrismTextLayout.java:1070)
at
javafx.graphics/com.sun.javafx.text.PrismTextLayout.ensureLayout(PrismTextLayout.java:230)
at
javafx.graphics/com.sun.javafx.text.PrismTextLayout.getBounds(PrismTextLayout.java:256)
at
javafx.controls/com.sun.javafx.scene.control.skin.Utils.computeTextWidth(Utils.java:129)
at
javafx.controls/javafx.scene.control.skin.LabeledSkinBase.computeMinLabeledPartWidth(LabeledSkinBase.java:809)
at
javafx.controls/javafx.scene.control.skin.LabeledSkinBase.computeMinWidth(LabeledSkinBase.java:306)
at
javafx.controls/javafx.scene.control.Control.computeMinWidth(Control.java:504)
at javafx.graphics/javafx.scene.Parent.minWidth(Parent.java:1049)
at
javafx.graphics/javafx.scene.layout.Region.minWidth(Region.java:1500)
at
javafx.graphics/javafx.scene.layout.Region.computeChildPrefAreaWidth(Region.java:1959)
at
javafx.graphics/javafx.scene.layout.AnchorPane.computeChildWidth(AnchorPane.java:344)
at
javafx.graphics/javafx.scene.layout.AnchorPane.layoutChildren(AnchorPane.java:380)
at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1208)
at javafx.graphics/javafx.scene.Scene.doLayoutPass(Scene.java:594)
at
javafx.graphics/javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2600)
at
javafx.graphics/com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Toolkit.java:401)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at
javafx.graphics/com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:400)
at
javafx.graphics/com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:430)
at
javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:592)
at
javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:572)
at
javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:565)
at
javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:352)
at
javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at
javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at
javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:185)
at java.base/java.lang.Thread.run(Thread.java:1583)
Would anyone know how to fix this, if possible at all?
---rony