对于一个 Java 服务器来说经常要

缺少X11显示设置

Exception in thread "AWT-EventQueue-0" java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it. at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159) 

解决方案: 在linux的启动文件/etc/profile中增加了 export
DISPLAY=localhost:0

java在图形处理时调用了本地的图形处理库。在利用Java作图形处理(比如:图片缩放,图片签名,生成报表)时,如果运行在windows上不会出问题。如果将程序移植到Linux/Unix上的时候有可能出现图形不能显示的错误。


缺少X11GraphicsEnvironment

Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment at java.lang.Class.forName0(Native Method) 

解决方案: 在java程序启动时候,增加了-DJava.awt.headless=true参数

对于一个Java服务器来说经常要处理一些图形元素,例如地图的创建或者图形和图表等。这些API基本上总是需要运行一个X-server以便能使用AWT(Abstract
Window
Toolkit,抽象窗口工具集)。然而运行一个不必要的X-server并不是一种好的管理方式.有时你甚至不能运行X-server,因此最好的方案是运行headless服务器,来进行简单的图像处理.以上转摘自:

1.问题发生情况:使用poi导出Excel

<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.15</version></dependency>

2.完整报错信息如下:

Caused by: java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:103) at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82) at sun.awt.X11FontManager.isHeadless(X11FontManager.java:509) at sun.awt.X11FontManager.getFileNameFromPlatformName(X11FontManager.java:189) at sun.font.SunFontManager.initCompositeFonts(SunFontManager.java:3481) at sun.font.SunFontManager.access$700(SunFontManager.java:65) at sun.font.SunFontManager$2.run(SunFontManager.java:545) at java.security.AccessController.doPrivileged(Native Method) at sun.font.SunFontManager.<init>(SunFontManager.java:376) at sun.awt.FcFontManager.<init>(FcFontManager.java:35) at sun.awt.X11FontManager.<init>(X11FontManager.java:57) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83) at java.security.AccessController.doPrivileged(Native Method) at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74) at java.awt.Font.getFont2D(Font.java:491) at java.awt.Font.canDisplayUpTo(Font.java:2060) at java.awt.font.TextLayout.singleFont(TextLayout.java:470) at java.awt.font.TextLayout.<init>(TextLayout.java:531) at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:275) at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.<init>(AutoSizeColumnTracker.java:117) at org.apache.poi.xssf.streaming.SXSSFSheet.<init>(SXSSFSheet.java:79) at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:656) at org.apache.poi.xssf.streaming.SXSSFWorkbook.<init>(SXSSFWorkbook.java:246) at org.apache.poi.xssf.streaming.SXSSFWorkbook.<init>(SXSSFWorkbook.java:204) at org.apache.poi.xssf.streaming.SXSSFWorkbook.<init>(SXSSFWorkbook.java:179) at com.winning.polaris.engine.view.utils.WExcelUtils.createExcelFile(WExcelUtils.java:181) at com.winning.polaris.engine.view.utils.WExcelUtils.createRuleCusDataExcle(WExcelUtils.java:165) at com.winning.polaris.engine.view.rest.controller.EngineRuleController.knowledgeDownload(EngineRuleController.java:645) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:139) at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295) at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249) at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236) at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:376) ... 37 more

参考链接:

提示信息:”Can’t connect to X11 window
server”这是由于Linux的图形处理需要一个X Server服务器。

 

解决办法:

对于一个Java服务器来说经常要处理一些图形元素,例如地图的创建或者图形和图表等。这些API基本上总是需要运行一个X-server以便能使用AWT(Abstract
Window
Toolkit,抽象窗口工具集)。然而,运行一个不必要的X-server并不是一种好的网络管理方式。

1.如果服务器上安装有图形界面,可以通过设置环境变量:DISPALY=127.0.0.1:0.0解决。

这个解决方案依赖于你的Java版本。如果你运行在JDK1.4上,那么你将有机会运行headless服务器。

2.
如果没有安装图形界面,可以在Java运行时加上参数:-Djava.awt.headless=true。

-Djava.awt.headless=true
对于JDK1.3及更低的版本,有个来自eTeks的PJA工具包(Pure Java AWT
Toolkit,纯Java
AWT工具集)可以使用。它是一个在配置上与Sun的1.4版非常相似的headlessJava服务器,这种配置方式包含一组-D属性标志。

  1. 使用PJA库来代替本地图形处理库。

你需要下载相关的jar,将它们放到你的CLASSPATH中,然后设置下面的标志:

Tomcat的修改如下:

Dawt.toolkit=com.eteks.awt.PJAToolkit
Djava.awt.graphicsenv=com.eteks.java2d.PJAGraphicsEnvironment
在IBM的JDK下,你能找到下列所需的属性,这里我们将PJA的jar要放到lib/pja下:

相关文章

发表评论

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

*
*
Website