Temurin-build: フォント構成が欠落しているためにinstall4jを使用する場合のsun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)のNPE

作成日 2018年10月29日  ·  22コメント  ·  ソース: adoptium/temurin-build

こんにちは、
私たちのチームは、さまざまなLinuxディストリビューションのinstall4jでNPEの問題に遭遇しました。 (Ubuntu、Centos、Debianなど)
JDKバージョン:jdk8u181-b13

Installer4jを使用して製品をインストールすると、fontconfigの欠落が原因でnullポインター例外が発生し、次のようにトレースをスタックします。

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)

現在、回避策を使用して、フォントの依存関係をインストールします。
apt install fontconfig

ただし、この回避策は、お客様がOracle jdkからAdoptOpenJDKに切り替えたときの動作を変更し、互換性の問題のままです。

チームは、フォント構成をJDKにバンドルして、今後のバージョンで修正することを検討しますか?

乾杯、

ディストリビューション:jdk8u181-b13 Linux x64

bug x-linux

最も参考になるコメント

CentOS 6および7にパッケージfontconfigおよびurw-fontsをインストールすると、問題が修正されました。

全てのコメント22件

大声で考える-これは、Java 11または誰かが8uプロジェクトにパッチを追加するために、このサポートをバックポートするためにアップストリームにアクセスする必要がある問題のように見えます。

インストーラーの問題かもしれません、見てみましょう。

@kariannaインストーラーはJEditorPane.setText()をブートストラップし、それはこのコードパスを通過します

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 

これは、AdoptOpenJDKが提供する必要のあるフォントディレクトリが存在しないために発生します

それをJava11から8uプロジェクトにバックポートできれば素晴らしいです。

大声で考える-これは、Java 11または誰かが8uプロジェクトにパッチを追加するために、このサポートをバックポートするためにアップストリームにアクセスする必要がある問題のように見えます。

インストーラーの問題かもしれません、見てみましょう。

ねえ@kariannaコメントありがとう。

この問題が短期(数週間)または長期(月)で対処される予定のタイムラインはありますか?
この情報は、お客様へのサポートを計画し、悪影響を減らすのに役立ちます。

この段階ではおそらく長期的です。

FontConfigurationのNullPointerException。 java:1264は、LinuxバージョンのAdoptOpenJDKに含まれていないフォント構成ファイルが欠落していることが原因です。 例外の直接の原因は_configuration_ファイルの欠落であり、実際のフォントファイルの欠落ではないことに注意することが重要です。

AWTフォントサブシステムが初期化されると、 https。 /intl/fontconfig.html

JDKによってフォントが提供されておらず、OSが提供するフォントの使用が意図または構成されていない場合でも、例外をスローせずに初期化するには、AWTフォントサブシステムで最小限の構成が必要です。 $ JAVA_HOME / libに次の2行を含むfontconfig.propertiesファイルを提供すると、少なくとも、最初に、NullPointerExceptionの問題が軽減されます。

version=1
sequence.allfonts=default

_we_はアプリケーションにバンドルされているフォントのみを使用しているため、これは私たちの状況で実行可能な回避策です。 これにより、フォントサブシステムを初期化でき、後で問題なくクラスパスから独自のフォントをロードできます。 JDKにバンドルされているか、オペレーティングシステムによって提供されている実際のフォントを提供するために、JDKに依存するアプリケーションを実行しようとすると、YMMVがどうなるかわかりません。

fontconfig 2:2.13.1(arch linux)でも同じ問題が発生します。 fontconfigライブラリを手動でロードしようとしましたが、次のエラーが表示されました。

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

これは、含まれているjre/lib/amd64/libfreetype.so.6がシステムfontconfigと互換性がないことを意味します。 jre/lib/amd64/libfreetype.so.6を削除し、問題を解決しました。

@jarnbjoソリューションをありがとう。 FontConfigurationのNullPointerExceptionの問題を軽減することができました。 アルフィンLinux上のjava:1264

現在直面している

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)

どんな助けでも大歓迎です!
ディストリビューション:jdk8u202-b08 Linux x64

CentOS 6および7にパッケージfontconfigおよびurw-fontsをインストールすると、問題が修正されました。

こんにちは@ keertz04ソースコードにデバッグするときに同じことを経験しました。 fontconfig.propertiesを提供することで、FontConfigurationでNPEを取り除くことができますが、システムフォントがまだ利用できないため、示したように別のNPEが検出され、デフォルトのプラットフォームフォントを取得しようとすると例外がスローされます。
現在、回避策を使用してfontconfigをインストールしています

install4jを使用している人のために、最新リリース7.0.9に変更が含まれています。
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

私たちのチームはこのバージョンにアップグレードしていませんが、ここで注意する価値があると思います。

fontconfigの回避策として+1を使用し、fontconfig.propertiesを使用する必要はありませんでした。 (jdk8u202-b08)

@ xinyi9install4jリリースノートの良いキャッチ。 残念ながら、install4j 7.0.9を使用してインストーラーをビルドしようとしましたが、それでも問題が発生します。
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)

これはx86_64Clearlinux 4.14.21-380.ltsにあり、jdk8u192-b12を使用しています

現在直面している

`` `
原因:java.lang.NullPointerException:null
hub_1 | sun.awt.FcFontManager.getDefaultPlatformFont(FcFontManager.java:76)で
hub_1 | sun.font.SunFontManager $ 2.run(SunFontManager.java:433)で

@ keertz04 fontconfigをインストールし、fontconfig.propertiesを追加した後、私も同じです。
だから、高山で、修正されていません。

adoptopenjdk/openjdk11-openj9:jdk-11.0.7_10_openj9-0.20.0-alpine-slim
私はただ走らなければなりませんでした:
apk add --no-cache fontconfig ttf-dejavu

Ubuntu 16.04サーバーにfontconfigをインストールすると、問題が解決しました。 幸いにもfontconfig.propertiesを追加する必要

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

fonts-dejavu-coreも重要なようです。 それがないと、別の例外が発生します。

JRE 11の使用(はい、JDKではなくJREダウンロード):

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

画像をjava:8に置き換えてください。完璧です。

Red Hat 7.7では、最初にfontconfig.propertiesを作成してみました。
fontconfigはインストールされていますが、urw-fontsはインストールされていません。
置き換えパッケージurw-base35-fontsをインストールすると、問題が解決しました。

Red Hat 7.7では、最初にfontconfig.propertiesを作成してみました。
fontconfigはインストールされていますが、urw-fontsはインストールされていません。
置き換えパッケージurw-base35-fontsをインストールすると、問題が解決しました。

こんにちは、

私にとっては、不足しているfontconfigをインストールし、$ JAVA_HOME / libで前述したfontconfig.propertiesを導入するだけで十分でした。

私の環境:
OpenJDKランタイム環境AdoptOpenJDK(ビルド14.0.1 + 7)
fontconfig-2.13.0-4.3.el7.x86_64

@jarnbjoソリューションをありがとう。 FontConfigurationのNullPointerExceptionの問題を軽減することができました。 アルフィンLinux上のjava:1264

現在直面している

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)

どんな助けでも大歓迎です!
ディストリビューション:jdk8u202-b08 Linux x64

こんにちは、私はこのgithubスレッドを見て、夜を幸せにするまで、それに苦しんで何日も過ごしました

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

LinuxバージョンのAdoptOpenJDK / openjdk-support#70にフォントがなかったことを確認してください

adoptopenjdk/openjdk11-openj9:jdk-11.0.7_10_openj9-0.20.0-alpine-slim
私はただ走らなければなりませんでした:
apk add --no-cache fontconfig ttf-dejavu

これにより、Dockerコンテナがopenjdk:8-jre-alpineの上に構築されている場合の問題も修正されます

このページは役に立ちましたか?
0 / 5 - 0 評価