Linux下java验证码不显示:Could not initialize class sun.awt.X11FontManager

一、问题

javaweb项目,登录的时候有个图片验证码的功能。在Windows本地测试能够正常显示,部署到Linux上就不行了。报错如下:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager

  

二、解决

经查,与这个有关:

1.什么是Headless mode?
Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。

2.何时使用和headless mode?
Headless模式虽然不是我们愿意见到的,但事实上我们却常常需要在该模式下工作,尤其是服务器端程序开发者。因为服务器(如提供Web服务的主机)往往可能缺少前述设备,但又需要使用他们提供的功能,生成相应的数据,以提供给客户端(如浏览器所在的配有相关的显示设备、键盘和鼠标的主机)。

3.如何使用和Headless mode?
一般是在程序开始激活headless模式,告诉程序,现在你要工作在Headless mode下,就不要指望硬件帮忙了,你得自力更生,依靠系统的计算能力模拟出这些特性来:
System.setProperty("java.awt.headless","true")

第一步:在tomcat/bin/catalina.sh文件中增加一行配置,并且重启tomcat

#解决登录验证码图片显示不了的bug
CATALINA_OPTS=-Djava.awt.headless=true

然后还是不行,还是会报错:没有这个依赖  libgcc_s.so.1

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.UnsatisfiedLinkError: /usr/src/java/jdk/jdk1.7.0_71/jre/lib/i386/libfontmanager.so: libgcc_s.so.1: cannot open shared object file: No such file or directory

第二步:运行如下命令,重启tomcat即可

[[email protected] tomcat7-8080]# yum install libgcc.i686 --setopt=protected_multilib=false
[[email protected] tomcat7-8080]# yum grouplist
[[email protected] tomcat7-8080]# yum groupinstall Fonts

三、 另外一种解决方案

生成图片的java文件里写:

public class RandomNumUtil {

    static{
        System.setProperty("java.awt.headless", "true");
    }

}

四、参考

https://blog.csdn.net/weixin_34381666/article/details/91900916

https://www.cnblogs.com/hwaggLee/p/5454463.html

https://www.cnblogs.com/wudi-dudu/p/7792721.html

原文地址:https://www.cnblogs.com/helf/p/12012619.html

时间: 2024-10-11 21:05:17

Linux下java验证码不显示:Could not initialize class sun.awt.X11FontManager的相关文章

linux下 Tomcat 验证码不显示

linux下 Tomcat 验证码不显示 编辑Tomcat bin 目录下 catalina.sh1.在catalina.sh添加 JAVA_OPTS="-Djava.awt.headless=true" 或 JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:PermSize=512M -XX:MaxPermSize=1024m -Djava.awt.headless=true" 2.修改${TOMCAT_HOME}/bin/ca

stash 登录验证码不显示,报Could not initialize class sun.awt.X11FontManager错误

stash登录时提示输入验证码,可是验证码不显示了,怎么解决了? 报错信息: 再通过chrome的审查元素进行查看具体报错的原因: Error creating bean with name 'imageCaptchaServicePrototype' defined in class path resource [stash-context.xml]: Cannot create inner bean 'com.atlassian.stash.internal.web.util.captcha

linux下java程序与C语言程序通过SOCKET通信的简单例子

linux下java程序与C语言程序通过SOCKET通信的简单例子 今天上午实验了java程序与c语言程序通过socket进行通信.由于没学过java,因此只是编写了C语言端的代码,java端的代码是从网上别的文章中找的,经过少量修改后与C语言端程序通信成功. 本例中C语言端作为服务器,java端作为客户端 代码如下: /****************** server program *****************/ #include <stdio.h> #include <sy

Linux下Tomcat启动后显示控制台

Linux下Tomcat启动后显示控制台: 采用 ./startup.sh 启动,则没有显示控制台. 要像windows一样显示控制台,则 : ./catalina.sh run

linux下java环境变量的设置,形参个数可变的方法

首先我们执行jdk二进制文件: 生成一个jdk目录,将这个目录mv到/usr/loca/jdk # vim /etc/profile export JAVA_HOME=/usr/local/jdkexport CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport PAT# vim Varargs.java #source /etc/profile 例子: #vim test.java 这个例子中test方法形参个数可变,在形参列表中,最后一个形参

Linux下Java性能监控

Linux下Java性能监控 一.JVM堆内存使用监控 获取thread dump的3种方法: 1)使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun.management>HotSpotDiagnostic>操作>dumpHeap中,点击 dumpHeap按钮.生成的dump文件在java应用的根目录下面. 2)jmap -heap 1234 (1234为进程号) 3)cmd ->jvisualvm,远程连接,选择堆Dump生成he

Linux下Java线程详细监控和其dump的分析使用----分析Java性能瓶颈

这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: (一):通过[top -p 12377 -H] 查看java进程的有哪些线程的运行情况:       和通过[jstack 12377 > stack.log]生成Java线程的dump详细信息: 先用top命令找出占用资源厉害的java进程id,如图:# top 如上

14行脚本配置Linux下Java环境变量

对于Java初学者而言,可能在Java开发环境的配置上要花一番功夫,而在Linux下,配置Java的环境变量,这个功夫可能又会增加.为此,我编了一个bash脚本来实现自动配置Java的环境变量.你只需要将如下脚本和你下载的jdk压缩包放到一个文件夹下,执行该脚本,并依据提示输入一些信息即可. config_java.sh #!/bin/bash jdkpath=/usr/lib/java/ sudo mkdir $jdkpath read -p "Please input the name of

linux下java 和 javac version 不一致问题

centos下 我新安装了个jdk1.7的版本 ,vi profile 之后 java -version 是新版本,想在看看javac -version 发现还是1.6的 之前安装了1.6的 那好咱就卸载他 查找Java 版本信息 rpm -qa|grep java 返回如下信息 xorg-x11-drv-savage-2.1.1-5.fc6 avahi-glib-0.6.16-10.el5_6 java-1.6.0-openjdk-1.6.0.0-5.1.13.3.el5_10 avahi-c