【開発】POI Excelファイルオープン時に例外発生

1.Excel出力時にエラー発生

  • POIをOutOfMemory対応でSXSSFWorkbook
  • Windows環境では正常に動作した
  • Linux環境にて動作確認したところエラーが発生
  • エラー原因はfontがない
  • fontを追加

2.Excel出力時にエラー発生

java.lang.InternalError: java.lang.reflect.InvocationTargetException
                    at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:86)
                    at java.base/java.security.AccessController.doPrivileged(Native Method)
                    at java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
                    at java.desktop/java.awt.Font.getFont2D(Font.java:497)
                    at java.desktop/java.awt.Font.canDisplayUpTo(Font.java:2246)
                    at java.desktop/java.awt.font.TextLayout.singleFont(TextLayout.java:469)
                    at java.desktop/java.awt.font.TextLayout.<init>(TextLayout.java:530)
                    at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:273)
                    at org.apache.poi.ss.util.SheetUtil.getColumnWidth(SheetUtil.java:248)
                    at org.apache.poi.ss.util.SheetUtil.getColumnWidth(SheetUtil.java:233)
                    at org.apache.poi.xssf.usermodel.XSSFSheet.autoSizeColumn(XSSFSheet.java:551)
                    at org.apache.poi.xssf.usermodel.XSSFSheet.autoSizeColumn(XSSFSheet.java:533)
                    at org.pentaho.di.trans.steps.excelwriter.ExcelWriterStep.closeOutputFile(ExcelWriterStep.java:244)
                    at org.pentaho.di.trans.steps.excelwriter.ExcelWriterStep.processRow(ExcelWriterStep.java:209)
                    at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)
                    at java.base/java.lang.Thread.run(Thread.java:834)
    Caused by: java.lang.reflect.InvocationTargetException
                    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
                    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
                    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
                    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
                    at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:84)
                    ... 15 more
    Caused by: java.lang.NullPointerException
                    at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262)
                    at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225)
                    at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:107)
                    at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:719)
                    at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:367)
                    at java.base/java.security.AccessController.doPrivileged(Native Method)
                    at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:312)
                    at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35)
                    at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)
                    ... 20 more

3.フォントを追加

LinuxのJREには、フォントがないことがあるようなので
JRE8をダウンロードして、フォントを取得しLinux環境へ追加する。

追加するファイルは下記

Windows
 インストールディレクトリ\Java\jre1.8.0_261\lib
  ・fontsフォルダ
  ・fontconfig.bfc
  ・fontconfig.properties.src

Linux
 コピー先
  インストールディレクトリのJavaのlibへコピー

タイトルとURLをコピーしました