J2SE中的HeadLess工作模式

J2SE中的HeadLess工作模式问题描述今天开发同事发了一个错误截图,说是数据导出有问题,提示无法访问指定的页面,如下图:apama tomcat日志打印的错误内容:提示没有找到java.awt.Font类, 抛出了NoClassDefFoundError异常。

大家好,欢迎来到IT知识分享网。

问题描述

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

J2SE中的HeadLess工作模式

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

J2SE中的HeadLess工作模式

提示没有找到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

J2SE中的HeadLess工作模式

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/85449.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信