I recently had to deal with this little bugger as we moved from the OpenJDK 8 package supplied by the Linux distro of choice to AdoptOpenJDK 8. It is important to know that we completely uninstalled OpenJDK, including all its transient dependencies.
(And in due time weâll
uninstall Java 8 and replace that grandpa as well)
As a
result, parts of our application didnât work any longer, resulting in this nice
and shiny Java stacktrace.
2019-05-03 08:22:07,345 ERROR [qtp1896708863-35] [PlotChartController] [/][/][/]- error while creating chart image
java.lang.NullPointerException
at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
at sun.awt.FontConfiguration.init(FontConfiguration.java:107)
at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)
at sun.font.SunFontManager$2.run(SunFontManager.java:431)
at java.security.AccessController.doPrivileged(Native Method)
at sun.font.SunFontManager.<init>(SunFontManager.java:376)
at sun.awt.FcFontManager.<init>(FcFontManager.java:35)
at sun.awt.X11FontManager.<init>(X11FontManager.java:57)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
at java.security.AccessController.doPrivileged(Native Method)
at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
at java.awt.Font.getFont2D(Font.java:491)
at java.awt.Font.defaultLineMetrics(Font.java:2176)
at java.awt.Font.getLineMetrics(Font.java:2246)
at org.jfree.chart.axis.DateAxis.estimateMaximumTickLabelWidth(DateAxis.java:1453)
at org.jfree.chart.axis.DateAxis.selectHorizontalAutoTickUnit(DateAxis.java:1365)
at org.jfree.chart.axis.DateAxis.selectAutoTickUnit(DateAxis.java:1340)
at org.jfree.chart.axis.DateAxis.refreshTicksHorizontal(DateAxis.java:1616)
at org.jfree.chart.axis.DateAxis.refreshTicks(DateAxis.java:1556)
at org.jfree.chart.axis.ValueAxis.reserveSpace(ValueAxis.java:807)
at org.jfree.chart.plot.CombinedDomainXYPlot.calculateAxisSpace(CombinedDomainXYPlot.java:364)
at org.jfree.chart.plot.CombinedDomainXYPlot.draw(CombinedDomainXYPlot.java:442)
at org.jfree.chart.JFreeChart.draw(JFreeChart.java:1235)
at org.jfree.chart.JFreeChart.createBufferedImage(JFreeChart.java:1409)
at org.jfree.chart.JFreeChart.createBufferedImage(JFreeChart.java:1389)
at org.jfree.chart.ChartUtilities.writeChartAsPNG(ChartUtilities.java:183)
I obviously
removed some (a lot) parts to make it more readable and to hide corporate IP đ But this is the relevant part.
I found this bug report on Github and for once, plowing through the comments, it helped me. As is mentioned there, the culprit is the missing âfontconfigâ package. So, I added another Ansible task to our playbook to provision the server et voila, the problem is gone.
- name: Install fontconfig package
package:
name: fontconfig
state: present
tags:
- java
As
mentioned earlier, we had wiped all that was relevant to OpenJDK off the system
and by doing so, also uninstalled the âfontconfigâ package. Otherwise this
error wouldnât have surfaced. But thatâs the benefit of starting with a clean
slate. This way you know if something is missing and donât get surprised by
errors all of a sudden while, at the same time, it is working on another
machine.