问题描述:
最近项目中用到Spire.Xls把Ecxel转为HTML或者PDF时,项目在windows运行正常,换到linux服务器中就报错。
项目异常信息:
先是报错:
/usr/lib/jvm/jdk1.8.0/jre/amd64/libawt_xawt:libXrender.so.1:cannot openshared object file : No such file or directory
然后再次加载时报错:
Could not initialize class com .spire xls.core.spreadsheet.XlsWorkbook
或者
java.lang.NoClassDefFoundError:Could not initialize class ...
原因
java在图形处理时调用了本地的图形处理库。在利用Java作图形处理(比如:图片缩放,图片签名,生成报表)时,如果运行在windows上不会出问题。如果将程序移植到Linux/Unix上的时候有可能出现图形不能显示的错误。
解决方案:
tomcat
打开tomcat/bin
目录下的catalina.sh
文件
在有-Djava.io.tmpdir...
的地方下面加上Djava.awt.headless=true
文件中大概有7个左右,tomcat版本不一样个数都不同(都加上就完事了)
大概样子:
"$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS"
-classpath "$CLASSPATH"
-Dcatalina.base="$CATALINA_BASE"
-Dcatalina.home="$CATALINA_HOME"
-Djava.io.tmpdir="$CATALINA_TMPDIR"
-Djava.awt.headless=true
jar
如果是jar包的话:
在java -jar
后面加上参数-Djava.awt.headless=true
java -jar -Djava.awt.headless=true xxx.jar