Bug 1768935

Summary: JRE created by jlink fails to start application - NoClassDefFoundError: Could not initialize class sun.font.SunFontManager
Product: OpenJDK on Windows Reporter: Joe Wright <jwright>
Component: OpenJDK 11Assignee: Radoslav Čáp <rcap>
Status: VERIFIED --- QA Contact:
Severity: high Docs Contact:
Priority: unspecified    
Version: 11CC: jvanek, zac.heismann
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Windows   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Joe Wright 2019-11-05 15:39:56 UTC
Description of problem:
- Font missing in openjdk packaging

Version-Release number of selected component (if applicable):
- 11

How reproducible:
- 100%

Steps to Reproduce:
- Download Windows OpenJDK 11 : https://access.redhat.com/jbossnetwork/restricted/softwareDetail.html?softwareId=74421&product=core.service.openjdk&version=&downloadType=distributions
- Unzip it to JAVA_HOME
- cd to JAVA_HOME/bin
- execute command: "jlink --no-header-files --no-man-pages --compress=2 --strip-debug --add-modules=java.base,jdk.attach,jdk.jfr,java.compiler,jdk.charsets,jdk.jlink,java.datatransfer,jdk.compiler,jdk.jshell,java.desktop,jdk.crypto.cryptoki,jdk.jsobject,java.instrument,jdk.crypto.ec,jdk.jstatd,java.logging,jdk.crypto.mscapi,jdk.localedata,java.management,jdk.dynalink,jdk.management.agent,java.management.rmi,jdk.editpad,jdk.management.jfr,java.naming,jdk.hotspot.agent,jdk.management,java.net.http,jdk.httpserver,jdk.naming.dns,java.prefs,jdk.internal.ed,jdk.naming.rmi,java.rmi,jdk.internal.jvmstat,jdk.net,java.scripting,jdk.internal.le,jdk.pack,java.se,jdk.internal.opt,jdk.rmic,java.security.jgss,jdk.internal.vm.ci,jdk.scripting.nashorn,java.security.sasl,jdk.internal.vm.compiler,jdk.scripting.nashorn.shell,java.smartcardio,jdk.internal.vm.compiler.management,jdk.sctp,java.sql,jdk.jartool,jdk.security.auth,java.sql.rowset,jdk.javadoc,jdk.security.jgss,java.transaction.xa,jdk.jcmd,jdk.unsupported.desktop,java.xml.crypto,jdk.jconsole,jdk.unsupported,java.xml,jdk.jdeps,jdk.xml.dom,jdk.accessibility,jdk.jdi,jdk.zipfs,jdk.aot,jdk.jdwp.agent --output java-runtime-all-mods
- this created a JRE image in the sub directory java-runtime-all-mods"
- Used this JRE image to launch the Swing application I provided in the attachment zip files using this command: "java-runtime-all-mods\bin\java -cp PATH_TO_MY_EXAMPLE_APPLICATION\helloworld-client-1.0-SNAPSHOT.jar com.zac.swing.hw.HelloWorldSwing"



Actual results:
Below error was seen in windows (Linux JDK ZIP of same version worked fine) :
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: Could not initialize class sun.font.SunFontManager
        at java.desktop/sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:265)
        at java.desktop/sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:1243)
        at java.desktop/javax.swing.JComponent.getFontMetrics(JComponent.java:1646)
        at java.desktop/javax.swing.plaf.basic.BasicLabelUI.getPreferredSize(BasicLabelUI.java:246)
        at java.desktop/javax.swing.JComponent.getPreferredSize(JComponent.java:1680)
        at java.desktop/java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:724)
        at java.desktop/java.awt.Container.preferredSize(Container.java:1823)
        at java.desktop/java.awt.Container.getPreferredSize(Container.java:1807)
        at java.desktop/javax.swing.JComponent.getPreferredSize(JComponent.java:1682)
        at java.desktop/javax.swing.JRootPane$RootLayout.preferredLayoutSize(JRootPane.java:866)
        at java.desktop/java.awt.Container.preferredSize(Container.java:1823)
        at java.desktop/java.awt.Container.getPreferredSize(Container.java:1807)
        at java.desktop/javax.swing.JComponent.getPreferredSize(JComponent.java:1682)
        at java.desktop/java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:724)
        at java.desktop/java.awt.Container.preferredSize(Container.java:1823)
        at java.desktop/java.awt.Container.getPreferredSize(Container.java:1807)
        at java.desktop/java.awt.Window.pack(Window.java:826)
        at com.zac.swing.hw.HelloWorldSwing.createAndShowGUI(HelloWorldSwing.java:21)
        at com.zac.swing.hw.HelloWorldSwing$1.run(HelloWorldSwing.java:31)
        at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)


Expected results:
- application runs normally

Additional info:

Comment 2 Alex Kashchenko 2019-11-13 17:17:18 UTC
Updated jdk11 build with the fix is published on customer portal: https://access.redhat.com/jbossnetwork/restricted/listSoftware.html?downloadType=distributions&product=core.service.openjdk&version=11.0.5.10-2

Comment 3 Radoslav Čáp 2020-05-07 17:37:02 UTC
Reproduced with openjdk-11.0.5.10 and sample jar from ticket:

C:\Users\tester\Desktop\java-11-openjdk-11.0.5.10-1.windows.redhat.x86_64\java-11-openjdk-11.0.5.10-1.windows.redhat.x86_64\bin>.\java-runtime-all-mods\bin\java -cp C:\Users\tester\Desktop\swing-helloworld-example\lib\helloworld-client-1.0-SNAPSHOT.jar com.zac.swing.hw.HelloWorldSwing
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: Could not initialize class sun.font.SunFontManager
        at java.desktop/sun.font.FontDesignMetrics.getMetrics(Unknown Source)
        at java.desktop/sun.swing.SwingUtilities2.getFontMetrics(Unknown Source)
        at java.desktop/javax.swing.JComponent.getFontMetrics(Unknown Source)
        at java.desktop/javax.swing.plaf.basic.BasicLabelUI.getPreferredSize(Unknown Source)
        at java.desktop/javax.swing.JComponent.getPreferredSize(Unknown Source)
        at java.desktop/java.awt.BorderLayout.preferredLayoutSize(Unknown Source)
        at java.desktop/java.awt.Container.preferredSize(Unknown Source)
        at java.desktop/java.awt.Container.getPreferredSize(Unknown Source)
        at java.desktop/javax.swing.JComponent.getPreferredSize(Unknown Source)
        at java.desktop/javax.swing.JRootPane$RootLayout.preferredLayoutSize(Unknown Source)
        at java.desktop/java.awt.Container.preferredSize(Unknown Source)
        at java.desktop/java.awt.Container.getPreferredSize(Unknown Source)
        at java.desktop/javax.swing.JComponent.getPreferredSize(Unknown Source)
        at java.desktop/java.awt.BorderLayout.preferredLayoutSize(Unknown Source)
        at java.desktop/java.awt.Container.preferredSize(Unknown Source)
        at java.desktop/java.awt.Container.getPreferredSize(Unknown Source)
        at java.desktop/java.awt.Window.pack(Unknown Source)
        at com.zac.swing.hw.HelloWorldSwing.createAndShowGUI(HelloWorldSwing.java:21)
        at com.zac.swing.hw.HelloWorldSwing$1.run(HelloWorldSwing.java:31)
        at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
        at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)


On java-11-openjdk-11.0.7.10-1.windows.redhat.x86_64 was swing window rendered and displayed properly.