问题描述

今天开发同事发了一个错误截图,说是数据导出有问题,提示无法访问指定的页面,如下图:

apama tomcat日志打印的错误内容:

提示没有找到java.awt.Font类, 抛出了NoClassDefFoundError异常。

问题分析

该功能是一个execl导出功能,同hssf实现的execl导出功能。里面用到了设置单元格字体类,默认加载awt的front类。但是当前服务器是一个控制台服务器,没有对应的显示系统比如操作系统桌面、linux的x-window,导致提供真实显示需要的一些重量级组件都找不到实现类。 从而系统运行后报错。 java开发的时候考虑这种情况了, 所以提供了一种对应的无桌面系统下的运行模式,即Headless模式。 该模式提供一些轻量级组件的实现方式,主要通过模拟window实现方式实现了脱离window的工作环境。

Headline模式提供以下实现:

创建除顶层以外的轻量级组件,例如Canvas,Panel和Swing组件获取有关可用字体,字体指标和字体设置的信息设置颜色以呈现文本和图形创建和获取图像并准备要渲染的图像使用,和类进行打印。java.awt.PrintJobjava.awt.print。* javax.print。*发出音频提示音模式切换

怎么从正常模式切换到headline模式呢, 其实很简单,java提供了几种方式:

1、在main函数入口通过System.setProperties("java.awt.headless", true);

2、通过java的启动参数指定 JAVA_OPTS="-Djava.awt.headless=true"

3、在环境变量中定义改属性,并且赋值位true。 export java.awt.headless=true

使用以上3种方法都可以让jvm在启动的时候,把工作模式修改位headline,这样就不会在创建使用awt资源的时候去加载window交互系统提供的具体实现了。

解决方法

因为我们用的是tomcat,所以只需要在tomcat的启动脚本中增加启动参数即可。

修改tomat/bin/catalina.sh脚本,在JAVA_OPTS后面追加-Djava.awt.headless=true

参考地址:https://www.oracle.com/technical-resources/articles/javase/headless.html

java headless_J2SE中的HeadLess工作模式相关推荐

  1. java连接rabbitmq_RabbitMQ教程(工作模式篇)

    1 RabbitMQ介绍 1.1 应用场景 ​ MQ全称为Message Queue,即消息队列, RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue ...

  2. Java 8 中的工厂方法模式

    为什么80%的码农都做不了架构师?>>>    先唠叨一句工厂方法模式的定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行. ...

  3. linux必须运行在enforcing,Linux系统中SELinux的工作模式(Disabled、Permissive和Enforcing)...

    通过对SElinux的介绍,初学者可以这样认为,在传统Linux系统使用访问控制方式的基础上,附加使用SELinux可增强系统安全.那么,SELinux是如何运行的呢? 在解释 SELinux 的工作 ...

  4. java开发中Bean的Builder模式简析

    1.传统模式,通过构造器new出来 大量重载,添加属性,则需要添加新的构造方法,不利于拓展 public class Animal {private String eyes;private Strin ...

  5. 【嵌入式开发】ARM 处理器工作模式 及 修改方法 ( 处理器模式 | 设置处理器模式 | 程序状态字寄存器 CPSR SPSR | 模式设置代码编写 | 设置 svc 模式 )

    一. 处理器工作模式相关介绍 1. 处理器模式简介 (1) 处理器工作模式分类 (2) 处理器不同工作模式区别 (3) Linux 系统运行的模式 (4) 特权模式 说明 (5) 异常模式 (6) 系 ...

  6. linux怎么进入bios看raid,教程:BIOS中如何打开RAID模式

    教程:BIOS中如何打开RAID模式 用户构筑RAID 0阵列系列步骤非常简单,只需在BIOS中轻松几步设置即可搞定.目前主流的B75/B85主板具备RAID0功能,其中B75仅有1个SATA3.0接 ...

  7. android classloader的功能和工作模式,Android中ClassLoader和java中ClassLoader有什么关系和不同...

    一.Java中的ClassLoader是什么? 当写好一个Java应用程序,程序都是由若干个.class类文件组织而成的,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都 ...

  8. java headless_在Java SE上使用Headless模式的超级指南

    这篇文章介绍怎样在标准Java(Java SE,也称作J2SE)平台上用Headless模式. Headless模式是在缺少显示屏.键盘或者鼠标时的系统配置.听起来不可思议,但事实上你可以在这中模式下 ...

  9. 密码学 实现 DES 的工作模式 电码本模式ECB 密码分组链接模式CBC java 实现

    实现 DES 的工作模式 一. 实验目的 掌握 DES 算法的工作原理: 熟悉分组加密算法的工作模式. 二. 实验原理 DES 的基本原理 ppop 其入口参数有三个:key.data.mode. K ...

最新文章

  1. c# WINFORM SOCKET编程-简单聊天程序(服务端)
  2. RecyclerView复杂适配器的终极形态?代码更解耦
  3. stdthread(2)创建
  4. MySQL数据库:范式
  5. Faster-RCNN训练自己数据集遇到的问题集锦
  6. spring的钩子_spring提供的钩子,你知道哪些
  7. QT安装和Hello,world
  8. percona-toolkit工具包的使用教程
  9. Android开发笔记(六十二)HTTP数据格式的解析
  10. adroid intent使用
  11. 【三维装箱】基于matlab求解三维装箱优化问题【含Matlab源码 949期】
  12. EF学习笔记-2 EF之支持复杂类型的实现
  13. MFC串口发送数据大于128数据出错的解决办法(发送0xFE接收得到0x3F等问题)
  14. 无法启动Windows安全中心服务怎么办
  15. linux设置cpu虚拟化,linux 查看cpu是否支持虚拟化
  16. 泌阳县鸿蒙机器人编程,鸿蒙教育机器人编程课程开始招生了!!!
  17. MATLAB命令大全和矩阵操作大全
  18. 13 Python总结之估值
  19. 按键精灵打怪学习-前台和内网发送后台验证码
  20. python小技巧,通过excle生成字典型变量

热门文章

  1. Python文档阅读——Pydoc
  2. MacOS配置Python环境
  3. Javac编译器的工作过程
  4. java keydown_利用Keydown事件阻止用户输入实现代码
  5. 地摊经济的时代真的到来了吗?今天我们就带你用数据盘一盘。你想好摆摊去卖什么了吗?
  6. neutron中网络虚拟化技术的应用
  7. Ubuntu14.04 安装WineQQ 2013
  8. 廉航特价周期表(1.18更新)
  9. 【Elasticsearch】文本分析 Text analysis (1)
  10. python 如何定义函数——基础详细