问题描述:使用poi-ooxml包对数据进行excel导出。在windows系统下,导出正常。应用部署到linux系统下,下载不了。报错如下:
Caused by: java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:103)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
at sun.awt.X11FontManager.isHeadless(X11FontManager.java:509)
at sun.awt.X11FontManager.getFontPath(X11FontManager.java:786)
at sun.font.SunFontManager.getPlatformFontPath(SunFontManager.java:3282)
at sun.font.SunFontManager$10.run(SunFontManager.java:3308)
at java.security.AccessController.doPrivileged(Native Method)
at sun.font.SunFontManager.loadFonts(SunFontManager.java:3304)
at sun.awt.X11FontManager.loadFonts(X11FontManager.java:460)
at sun.font.SunFontManager.findFont2D(SunFontManager.java:2348)
at java.awt.Font.getFont2D(Font.java:500)
at java.awt.Font.canDisplayUpTo(Font.java:2060)
at java.awt.font.TextLayout.singleFont(TextLayout.java:470)
at java.awt.font.TextLayout.<init>(TextLayout.java:531)
at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:254)
at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.<init>(AutoSizeColumnTracker.java:117)
at org.apache.poi.xssf.streaming.SXSSFSheet.<init>(SXSSFSheet.java:77)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:636)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:629)
at com.geostar.geosmarter.etl.common.ExcelUtil.exportExcel(ExcelUtil.java:103)
问题原因:tomcat下缺少-Djava.awt.headless=true
解决方案:在tomcat的catalina.sh下添加JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"