Temurin-build: NPE di sun.awt.FontConfiguration.getVersion (FontConfiguration.java:1264) saat menggunakan install4j karena konfigurasi font hilang

Dibuat pada 29 Okt 2018  ·  22Komentar  ·  Sumber: adoptium/temurin-build

Halo,
Tim kami mengalami masalah NPE di install4j di berbagai distribusi Linux. (Ubuntu, Centos, Debian dll)
Versi JDK: jdk8u181-b13

Saat menginstal produk kami menggunakan installer4j, kami mendapat pengecualian pointer nol yang disebabkan oleh hilangnya fontconfig, pelacakan tumpukan sebagai berikut:

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)

Saat ini kami menggunakan solusi untuk menginstal ketergantungan font
apt install fontconfig

Namun, solusi ini akan mengubah perilaku saat pelanggan kami beralih dari Oracle jdk ke AdoptOpenJDK, dan tetap menjadi masalah kompatibilitas bagi kami.

Apakah tim akan mempertimbangkan untuk menggabungkan konfigurasi font di JDK dan membantu memperbaikinya di versi selanjutnya?

Bersulang,

Distribusi: jdk8u181-b13 Linux x64

bug x-linux

Komentar yang paling membantu

Menginstal paket fontconfig dan urw-font di CentOS 6 & 7 memperbaiki masalah.

Semua 22 komentar

Berpikir keras - ini terlihat seperti masalah di mana kami perlu upstream untuk mendukung dukungan ini dari Java 11 atau seseorang untuk menambahkan tambalan ke proyek 8u.

Mungkin juga masalah penginstal, mari kita lihat.

@karianna Penginstal mem -bootstrap JEditorPane.setText() dan melewati jalur kode ini

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 

Itu terjadi karena direktori font yang harus disediakan Adopt OpenJDK tidak ada

Sangat bagus jika kita dapat melakukan backport dari proyek Java 11 hingga 8u.

Berpikir keras - ini terlihat seperti masalah di mana kami perlu upstream untuk mendukung dukungan ini dari Java 11 atau seseorang untuk menambahkan tambalan ke proyek 8u.

Mungkin juga masalah penginstal, mari kita lihat.

Hai @karianna terima kasih atas komentarnya.

Akankah ada perkiraan waktu bahwa masalah ini akan ditangani, katakanlah dalam jangka pendek (minggu), atau jangka panjang (bulan)?
Informasi ini akan berguna bagi kami untuk merencanakan dukungan bagi pelanggan kami dan mengurangi dampak negatif.

Mungkin jangka panjang pada tahap ini.

NullPointerException di FontConfiguration. java: 1264 disebabkan oleh file konfigurasi font yang hilang, yang tidak disertakan dengan AdoptOpenJDK versi Linux. Penting untuk diperhatikan bahwa penyebab langsung dari pengecualian tersebut adalah file _configuration_ yang hilang dan bukan karena file font yang sebenarnya hilang.

Ketika subsistem font AWT diinisialisasi, itu akan mencari file konfigurasi font di $ JAVA_HOME / lib mengikuti skema penamaan dan prioritas seperti yang dijelaskan di sini: https://docs.oracle.com/javase/8/docs/technotes/guides /intl/fontconfig.html

Meskipun tidak ada font yang disediakan oleh JDK dan penggunaan font yang disediakan OS tidak dimaksudkan atau dikonfigurasi, konfigurasi minimal diperlukan oleh subsistem font AWT untuk menginisialisasi tanpa memberikan pengecualian. Menyediakan file fontconfig.properties di $ JAVA_HOME / lib dengan dua baris berikut setidaknya, sebagai permulaan, akan mengurangi masalah dengan NullPointerException:

version=1
sequence.allfonts=default

Karena _we_ hanya menggunakan font yang dibundel dengan aplikasi kami, ini adalah solusi yang layak dalam situasi kami. Ini memungkinkan subsistem font untuk menginisialisasi dan kita dapat tanpa masalah nanti memuat font kita sendiri dari classpath. Saya tidak yakin apa yang terjadi dan YMMV jika Anda mencoba menjalankan aplikasi, yang mengandalkan JDK untuk menyediakan font yang sebenarnya, baik sebagai paket dengan JDK atau yang disediakan oleh sistem operasi.

Masalah yang sama dengan fontconfig 2: 2.13.1 (di arch linux). Saya mencoba memuat pustaka fontconfig secara manual dan saya melihat kesalahan berikut:

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)
    ...

Itu berarti jre/lib/amd64/libfreetype.so.6 disertakan tidak kompatibel dengan sistem fontconfig. Saya menghapus jre/lib/amd64/libfreetype.so.6 dan masalah terpecahkan.

@jarnbjo Terima kasih atas solusinya. Saya dapat mengurangi masalah dengan NullPointerException di FontConfiguration. java: 1264 di alphine Linux

Saat ini menghadap

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)

Setiap bantuan dihargai !!
Distribusi: jdk8u202-b08 Linux x64

Menginstal paket fontconfig dan urw-font di CentOS 6 & 7 memperbaiki masalah.

Hai @ keertz04 Saya mengalami hal yang sama saat melakukan debug ke kode sumber. Dengan menyediakan fontconfig.properties, ia dapat menyingkirkan NPE di FontConfiguration, tetapi menemukan NPE lain seperti yang Anda tunjukkan karena font sistem masih belum tersedia, dan ia akan mengeluarkan pengecualian saat mencoba mendapatkan font platform default.
Saat ini, Kami masih menggunakan solusi untuk menginstal fontconfig

Hanya untuk orang-orang yang menggunakan install4j, rilis terbaru 7.0.9 telah menyertakan perubahannya
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

Tim kami belum mengupgrade ke versi ini, mungkin perlu diperhatikan di sini.

1 untuk solusi fontconfig, dan tidak perlu menggunakan fontconfig.properties. (jdk8u202-b08)

@ xinyi9 bagus menangkap dengan catatan rilis install4j. Sayangnya, saya baru saja mencoba membuat penginstal menggunakan install4j 7.0.9 dan masih melihat masalah:
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)

Ini ada di x86_64 Clearlinux 4.14.21-380.lts, menggunakan jdk8u192-b12

Saat ini menghadap

``
Disebabkan oleh: java.lang.NullPointerException: null
hub_1 | di sun.awt.FcFontManager.getDefaultPlatformFont (FcFontManager.java:76)
hub_1 | di sun.font.SunFontManager $ 2. jalankan (SunFontManager.java:433)

@ keertz04 sama bagi saya, setelah menginstal fontconfig dan menambahkan fontconfig.properties.
Jadi tidak tetap, di alpine.

Menggunakan adoptopenjdk/openjdk11-openj9:jdk-11.0.7_10_openj9-0.20.0-alpine-slim
Saya hanya harus lari:
apk add --no-cache fontconfig ttf-dejavu

Menginstal fontconfig di server Ubuntu 16.04 memperbaiki masalah bagi saya. Untungnya, tidak perlu menambahkan fontconfig.properties (membuat peningkatan OpenJDK lebih mudah):

$ 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.

Sepertinya fonts-dejavu-core juga penting. Tanpa itu terjadi pengecualian lain.

Menggunakan JRE 11 (ya, unduhan JRE, bukan 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)

ganti gambar dengan java: 8 , perfect!

Pada Red Hat 7.7, kami pertama kali mencoba membuat fontconfig.properties tanpa kegembiraan.
Kami telah menginstal fontconfig, tetapi bukan urw-font.
Menginstal paket pengganti font urw-base35 menyelesaikan masalah.

Pada Red Hat 7.7, kami pertama kali mencoba membuat fontconfig.properties tanpa kegembiraan.
Kami telah menginstal fontconfig, tetapi bukan urw-font.
Menginstal paket pengganti font urw-base35 menyelesaikan masalah.

Hai,

bagi saya itu cukup untuk menginstal fontconfig yang hilang dan memperkenalkan fontconfig.properties yang disebutkan sebelumnya di $ JAVA_HOME / lib.

Env saya:
OpenJDK Runtime Environment AdoptOpenJDK (build 14.0.1 + 7)
fontconfig-2.13.0-4.3.el7.x86_64

@jarnbjo Terima kasih atas solusinya. Saya dapat mengurangi masalah dengan NullPointerException di FontConfiguration. java: 1264 di alphine Linux

Saat ini menghadap

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)

Setiap bantuan dihargai !!
Distribusi: jdk8u202-b08 Linux x64

hai, saya menghabiskan hari-hari menderita dengannya sampai saya melihat benang github ini dan membuat malam itu bahagia

https://github.com/corretto/corretto-11/issues/124#issuecomment -675629775

Lihat tidak ada fonta pada versi Linux AdoptOpenJDK / openjdk-support # 70

Menggunakan adoptopenjdk/openjdk11-openj9:jdk-11.0.7_10_openj9-0.20.0-alpine-slim
Saya hanya harus lari:
apk add --no-cache fontconfig ttf-dejavu

Ini juga memperbaiki masalah jika container Docker Anda dibangun di atas openjdk: 8-jre-alpine

Apakah halaman ini membantu?
0 / 5 - 0 peringkat