linux tomcat验证码显示不了could not initialise class sun.awt.X11FontManager

一、概述

登录界面有显示验证码,测试环境是好的,但是部署到阿里云上面去后,二维码显示不出来了。报错信息:“java.lang.NoClassDefFoundError:could not initialise class sun.awt.X11FontManager”。

阿里云环境为:

服务器:suse linux 11 enterprise 64 ,1G内存

jdk: jdk1.8 32位

tomcat:tomcat 8.0

二、解决过程

网上搜了很多解决方案,有的说是启动时要加个jvm参数

-Djava.awt.headless=true
结果发现不行。

还有的说要去catalina.sh里面类似如下的地方都要带上这个jvm参数

 -classpath "\"$CLASSPATH\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      -Djava.awt.headless=true \
结果还是不行。

后来在生成验证码的地方,手动加上了静态代码去设置这个参数

然后那个错误没了,取而代之的是另外一个错误:

"java.lang.UnsatisfiedLinkError:java8/jdk1.8.0-151/jre/lib/i386/libfontmanager.so libgcc_s.so.1:can not open shared object file:No such file or directory"

网上说是jdk版本不对,应该装64位。然后换成64位后,jvm起不来了!报错:

Error occurred during initialization of VM  
Could not allocate metaspace: 1073741824 bytes

应该内存不够,网上说export这个环境变量:

export _JAVA_OPTIONS=" -XX:-UseCompressedClassPointers "

于是在启动应用的脚本里面加了这句,结果还是不行。看来是内存太小,我买的是最普通的实例,只有1G内存,忍痛花了200多大洋升级到了2G内存,然后一切OK了!~如果是自己建的虚拟机,那把内存分配大一点应该就没问题了。


参考:

java8 linux启动报错

linux下验证码功能不能正常显示

jdk版本错误

猜你喜欢

转载自blog.csdn.net/gameloft9/article/details/79040782