Hallo,
Unser Team hat bei install4j auf verschiedenen Linux-Distributionen ein NPE-Problem festgestellt. (Ubuntu, Centos, Debian usw.)
JDK-Version: jdk8u181-b13
Bei der Installation unseres Produkts mit installer4j wurde eine Nullzeigerausnahme angezeigt, die durch das Fehlen von fontconfig und Stack Trace wie folgt verursacht wurde:
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 sun.font.SunFontManager.getInstance(SunFontManager.java:250) at sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:264) at sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:1113) at javax.swing.JComponent.getFontMetrics(JComponent.java:1626) at javax.swing.text.WrappedPlainView.updateMetrics(WrappedPlainView.java:318) at javax.swing.text.WrappedPlainView.updateChildren(WrappedPlainView.java:297) at javax.swing.text.WrappedPlainView.insertUpdate(WrappedPlainView.java:463) at javax.swing.plaf.basic.BasicTextUI$RootView.insertUpdate(BasicTextUI.java:1610) at javax.swing.plaf.basic.BasicTextUI$UpdateHandler.insertUpdate(BasicTextUI.java:1869) at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:201) at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:748) at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:707) at javax.swing.text.PlainDocument.insertString(PlainDocument.java:130) at javax.swing.text.DefaultEditorKit.read(DefaultEditorKit.java:273) at javax.swing.JEditorPane.setText(JEditorPane.java:1416) at javax.swing.JEditorPane.<init>(JEditorPane.java:290) at com.install4j.runtime.installer.frontend.headless.AbstractHeadlessScreenExecutor.init(AbstractHeadlessScreenExecutor.java:68) at com.install4j.runtime.installer.frontend.headless.ConsoleScreenExecutor.<init>(ConsoleScreenExecutor.java:24) at com.install4j.runtime.installer.frontend.headless.InstallerConsoleScreenExecutor.<init>(InstallerConsoleScreenExecutor.java:6) at com.install4j.runtime.installer.Installer.getScreenExecutor(Installer.java:88) at com.install4j.runtime.installer.Installer.runInProcess(Installer.java:57) at com.install4j.runtime.installer.Installer.main(Installer.java:45) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:85) at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:62)
Derzeit verwenden wir eine Problemumgehung, um die Schriftartenabhängigkeit von zu installieren
apt install fontconfig
Diese Problemumgehung ändert jedoch das Verhalten, wenn unser Kunde von Oracle JDK zu AdoptOpenJDK wechselt, und bleibt für uns ein Kompatibilitätsproblem.
Würde das Team in Betracht ziehen, die Schriftartkonfiguration im JDK zu bündeln und sie in weiteren Versionen zu beheben?
Prost,
Distribution: jdk8u181-b13 Linux x64
Lautes Nachdenken - dies scheint ein Problem zu sein, bei dem wir Upstream benötigen, um diese Unterstützung von Java 11 zurück zu portieren, oder jemanden, der dem 8u-Projekt einen Patch hinzufügt.
Könnte auch ein Installationsproblem sein, mal sehen.
@karianna Das Installationsprogramm JEditorPane.setText()
und das geht durch diesen Codepfad
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
Dies liegt daran, dass das von Adopt OpenJDK bereitgestellte Schriftartenverzeichnis nicht vorhanden ist
Es ist großartig, wenn wir das von Java 11 auf 8u zurückportieren können.
Lautes Nachdenken - dies scheint ein Problem zu sein, bei dem wir Upstream benötigen, um diese Unterstützung von Java 11 zurück zu portieren, oder jemanden, der dem 8u-Projekt einen Patch hinzufügt.
Könnte auch ein Installationsproblem sein, mal sehen.
Hey @karianna danke für die Kommentare.
Gibt es einen geschätzten Zeitplan, in dem dieses Problem behoben wird, beispielsweise kurzfristig (Wochen) oder längerfristig (Monate)?
Diese Informationen sind hilfreich, um den Support für unsere Kunden zu planen und negative Auswirkungen zu verringern.
Wahrscheinlich längerfristig in dieser Phase.
Die NullPointerException in FontConfiguration. java: 1264 wird durch eine fehlende Schriftartkonfigurationsdatei verursacht, die in der Linux-Version von AdoptOpenJDK nicht enthalten ist. Es ist wichtig zu beachten, dass die direkte Ursache der Ausnahme eine fehlende Konfigurationsdatei ist und nicht, dass tatsächliche Schriftdateien fehlen.
Wenn das AWT-Schriftsubsystem initialisiert wird, sucht es nach einer Schriftkonfigurationsdatei in $ JAVA_HOME / lib nach einem Namensschema und einer Priorität, wie hier beschrieben: https://docs.oracle.com/javase/8/docs/technotes/guides /intl/fontconfig.html
Selbst wenn vom JDK keine Schriftarten bereitgestellt werden und die Verwendung von vom Betriebssystem bereitgestellten Schriftarten nicht beabsichtigt oder konfiguriert ist, benötigt das AWT-Schriftarten-Subsystem eine minimale Konfiguration, um ohne Ausnahmen zu initialisieren. Wenn Sie eine fontconfig.properties- Datei in $ JAVA_HOME / lib mit den folgenden zwei Zeilen bereitstellen, wird das Problem mit der NullPointerException zumindest zunächst gemindert:
version=1
sequence.allfonts=default
Da _we_ nur Schriftarten verwendet, die mit unserer Anwendung gebündelt sind, ist dies in unserer Situation eine praktikable Problemumgehung. Es ermöglicht die Initialisierung des Schriftarten-Subsystems und wir können später ohne Probleme unsere eigenen Schriftarten aus dem Klassenpfad laden. Ich bin nicht sicher, was passiert und YMMV, wenn Sie versuchen, eine Anwendung auszuführen, die sich auf das JDK stützt, um tatsächliche Schriftarten bereitzustellen, entweder als mit dem JDK gebündelt oder als vom Betriebssystem bereitgestellt.
Gleiches Problem mit fontconfig 2: 2.13.1 (unter Arch Linux). Ich habe versucht, die fontconfig-Bibliothek manuell zu laden, und habe folgenden Fehler festgestellt:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: /usr/lib/libfontconfig.so.1.12.0: /usr/lib/libfontconfig.so.1.12.0: undefined symbol: FT_Done_MM_Var
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
...
Dies bedeutet, dass das enthaltene jre/lib/amd64/libfreetype.so.6
nicht mit dem System fontconfig kompatibel ist. Ich habe jre/lib/amd64/libfreetype.so.6
und das Problem gelöst.
@jarnbjo Danke für deine Lösung. Ich konnte das Problem mit der NullPointerException in FontConfiguration beheben. Java: 1264 unter alphinem Linux
Derzeit vor
Caused by: java.lang.NullPointerException: null
hub_1 | at sun.awt.FcFontManager.getDefaultPlatformFont(FcFontManager.java:76)
hub_1 | at sun.font.SunFontManager$2.run(SunFontManager.java:433)
hub_1 | at java.security.AccessController.doPrivileged(Native Method)
hub_1 | at sun.font.SunFontManager.<init>(SunFontManager.java:376)
hub_1 | at sun.awt.FcFontManager.<init>(FcFontManager.java:35)
hub_1 | at sun.awt.X11FontManager.<init>(X11FontManager.java:57)
hub_1 | at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
hub_1 | at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
hub_1 | at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
hub_1 | at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
hub_1 | at java.lang.Class.newInstance(Class.java:442)
hub_1 | at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
hub_1 | at java.security.AccessController.doPrivileged(Native Method)
hub_1 | at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
hub_1 | at sun.java2d.SunGraphicsEnvironment.getFontManagerForSGE(SunGraphicsEnvironment.java:190)
hub_1 | at sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(SunGraphicsEnvironment.java:224)
hub_1 | at sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(SunGraphicsEnvironment.java:252)
hub_1 | at sun.java2d.HeadlessGraphicsEnvironment.getAvailableFontFamilyNames(HeadlessGraphicsEnvironment.java:94)
hub_1 | at net.sf.jasperreports.engine.util.JRGraphEnvInitializer.initializeGraphEnv(JRGraphEnvInitializer.java:57)
Jede Hilfe wird geschätzt !!
Distribution: jdk8u202-b08 Linux x64
Durch die Installation der Pakete fontconfig und urw-fonts unter CentOS 6 und 7 wurde das Problem behoben.
Hi @ keertz04 Ich habe das gleiche beim Debuggen in den Quellcode erlebt. Durch die Angabe von fontconfig.properties kann die NPE bei FontConfiguration entfernt werden. Es wurde jedoch eine andere NPE aufgedeckt, wie Sie gezeigt haben, da Systemschriftarten immer noch nicht verfügbar sind, und es werden Ausnahmen ausgelöst, wenn versucht wird, die Standardplattformschriftart abzurufen.
Derzeit verwenden wir immer noch die Problemumgehung, um fontconfig
zu installieren
Nur zu Ihrer Information für Leute, die install4j verwenden, die neueste Version 7.0.9 enthält die Änderungen
Added a workaround for an InternalError when a bundled JRE could not find fonts on Linux
https://www.ej-technologies.com/download/install4j/changelog.html
Unser Team hat noch kein Upgrade auf diese Version durchgeführt. Wir sind jedoch der Meinung, dass sich hier ein Heads-up lohnt.
+1 für die fontconfig-Problemumgehung und musste nicht fontconfig.properties verwenden. (jdk8u202-b08)
@ xinyi9 guter Fang mit dem install4j Release Note. Leider habe ich gerade versucht, ein Installationsprogramm mit install4j 7.0.9 zu erstellen, und sehe immer noch das Problem:
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 com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:85)
at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:62)
Dies ist unter x86_64 Clearlinux 4.14.21-380.lts unter Verwendung von jdk8u192-b12 möglich
Derzeit vor
`` `
Auslöser: java.lang.NullPointerException: null
hub_1 | at sun.awt.FcFontManager.getDefaultPlatformFont (FcFontManager.java:76)
hub_1 | at sun.font.SunFontManager $ 2.run (SunFontManager.java:433)
@ keertz04 das gleiche für mich, nachdem ich fontconfig installiert und fontconfig.properties hinzugefügt habe.
Also nicht fixiert, auf alpinen.
Verwenden von adoptopenjdk/openjdk11-openj9:jdk-11.0.7_10_openj9-0.20.0-alpine-slim
Ich musste nur rennen:
apk add --no-cache fontconfig ttf-dejavu
Die Installation von fontconfig
auf dem Ubuntu 16.04-Server hat das Problem für mich behoben. Zum Glück müssen fontconfig.properties
hinzufügen (erleichtert OpenJDK-Upgrades):
$ sudo apt-get install fontconfig
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
fontconfig-config fonts-dejavu-core libfontconfig1
The following NEW packages will be installed:
fontconfig fontconfig-config fonts-dejavu-core libfontconfig1
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/1398 kB of archives.
After this operation, 4490 kB of additional disk space will be used.
Es sieht so aus, als ob fonts-dejavu-core
wichtig ist. Ohne sie tritt eine weitere Ausnahme auf.
Verwenden von JRE 11 (ja, der JRE-Download, nicht JDK):
$ java -version
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.7+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.7+10, mixed mode)
Bild durch Java ersetzen
In Red Hat 7.7 haben wir zunächst versucht, fontconfig.properties ohne Freude zu erstellen.
Wir hatten fontconfig installiert, aber keine urw-fonts.
Durch die Installation des Ersatzpakets urw-base35-fonts wurde das Problem behoben.
In Red Hat 7.7 haben wir zunächst versucht, fontconfig.properties ohne Freude zu erstellen.
Wir hatten fontconfig installiert, aber keine urw-fonts.
Durch die Installation des Ersatzpakets urw-base35-fonts wurde das Problem behoben.
Hallo,
Für mich war es genug, fehlende fontconfig zu installieren und fontconfig.properties einzuführen, die zuvor in $ JAVA_HOME / lib erwähnt wurden.
Mein env:
OpenJDK-Laufzeitumgebung AdoptOpenJDK (Build 14.0.1 + 7)
fontconfig-2.13.0-4.3.el7.x86_64
@jarnbjo Danke für deine Lösung. Ich konnte das Problem mit der NullPointerException in FontConfiguration beheben. Java: 1264 unter alphinem Linux
Derzeit vor
Caused by: java.lang.NullPointerException: null hub_1 | at sun.awt.FcFontManager.getDefaultPlatformFont(FcFontManager.java:76) hub_1 | at sun.font.SunFontManager$2.run(SunFontManager.java:433) hub_1 | at java.security.AccessController.doPrivileged(Native Method) hub_1 | at sun.font.SunFontManager.<init>(SunFontManager.java:376) hub_1 | at sun.awt.FcFontManager.<init>(FcFontManager.java:35) hub_1 | at sun.awt.X11FontManager.<init>(X11FontManager.java:57) hub_1 | at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) hub_1 | at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) hub_1 | at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) hub_1 | at java.lang.reflect.Constructor.newInstance(Constructor.java:423) hub_1 | at java.lang.Class.newInstance(Class.java:442) hub_1 | at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83) hub_1 | at java.security.AccessController.doPrivileged(Native Method) hub_1 | at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74) hub_1 | at sun.java2d.SunGraphicsEnvironment.getFontManagerForSGE(SunGraphicsEnvironment.java:190) hub_1 | at sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(SunGraphicsEnvironment.java:224) hub_1 | at sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(SunGraphicsEnvironment.java:252) hub_1 | at sun.java2d.HeadlessGraphicsEnvironment.getAvailableFontFamilyNames(HeadlessGraphicsEnvironment.java:94) hub_1 | at net.sf.jasperreports.engine.util.JRGraphEnvInitializer.initializeGraphEnv(JRGraphEnvInitializer.java:57)
Jede Hilfe wird geschätzt !!
Distribution: jdk8u202-b08 Linux x64
Hallo, ich habe Tage damit gelitten, bis ich diesen Github-Faden sah und die Nacht glücklich machte
https://github.com/corretto/corretto-11/issues/124#issuecomment -675629775
In der Linux-Version AdoptOpenJDK / openjdk-support # 70 gab es keine Schriftarten
Verwenden von
adoptopenjdk/openjdk11-openj9:jdk-11.0.7_10_openj9-0.20.0-alpine-slim
Ich musste nur rennen:
apk add --no-cache fontconfig ttf-dejavu
Dies behebt auch das Problem, wenn Ihr Docker-Container auf openjdk: 8-jre-alpine aufgebaut ist
Hilfreichster Kommentar
Durch die Installation der Pakete fontconfig und urw-fonts unter CentOS 6 und 7 wurde das Problem behoben.