Originally there were some bundled fonts used as a fallback in such cases. They were removed because of license issues during the transition from closed JDK to open JDK. Maybe it's time to reconsider that decision and provide some license-compatible fonts for that purpose.
Best Regards, Alexey On Wed, 2023-03-15 at 16:10 +0000, Matthias Baesken wrote: > On Linux Alpine we were running in the jtreg awt tests into a lot of > NPEs like this : > > java.lang.InternalError: java.lang.reflect.InvocationTargetException > at > java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.jav > a:87) > at > java.base/java.security.AccessController.doPrivileged(AccessControlle > r.java:318) > at > java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFacto > ry.java:75) > at java.desktop/java.awt.Font.getFont2D(Font.java:526) > at java.desktop/java.awt.Font$FontAccessImpl.getFont2D(Font.java:265) > at > java.desktop/sun.font.FontUtilities.getFont2D(FontUtilities.java:148) > at > java.desktop/sun.font.GlyphLayout$SDCache.<init>(GlyphLayout.java:254 > ) > at > java.desktop/sun.font.GlyphLayout$SDCache.get(GlyphLayout.java:328) > at java.desktop/sun.font.GlyphLayout.layout(GlyphLayout.java:375) > at java.desktop/java.awt.Font.layoutGlyphVector(Font.java:2858) > at FontLayoutStressTest.doLayout(FontLayoutStressTest.java:51) > at FontLayoutStressTest.main(FontLayoutStressTest.java:57) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Nativ > e Method) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Native > MethodAccessorImpl.java:77) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(De > legatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:568) > at > com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper > .java:127) > at java.base/java.lang.Thread.run(Thread.java:833) > Caused by: java.lang.reflect.InvocationTargetException > at > java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInsta > nce0(Native Method) > at > java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInsta > nce(NativeConstructorAccessorImpl.java:77) > at > java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newI > nstance(DelegatingConstructorAccessorImpl.java:45) > at > java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constru > ctor.java:499) > at > java.base/java.lang.reflect.Constructor.newInstance(Constructor.java: > 480) > at > java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.jav > a:85) > ... 17 more > Caused by: java.lang.NullPointerException: Cannot load from short > array because "sun.awt.FontConfiguration.head" is null > at > java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.j > ava:1264) > at > java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfigu > ration.java:224) > at > java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:10 > 6) > at > java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontMa > nager.java:706) > at > java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:358) > at > java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:315) > at > java.base/java.security.AccessController.doPrivileged(AccessControlle > r.java:318) > at > java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:315) > at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35) > at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56) > ... 23 more > > Seems this was caused because no fonts were installed on the machine. > Probably 'head' in FontConfiguration.getVersion() should be checked > for null and a specific exception like "Check your fonts or fonts > configuration" > should be throw. > > ------------- > > Commit messages: > - JDK-8304054 > > Changes: https://git.openjdk.org/jdk/pull/13045/files > Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=13045&range=00 > Issue: https://bugs.openjdk.org/browse/JDK-8304054 > Stats: 9 lines in 1 file changed: 8 ins; 0 del; 1 mod > Patch: https://git.openjdk.org/jdk/pull/13045.diff > Fetch: git fetch > https://git.openjdk.org/jdk pull/13045/head:pull/13045 > > PR: https://git.openjdk.org/jdk/pull/13045
