Can't connect to X11 window server的问题研究

Linux上 Can't connect to X11 window server using XX as the value of the DISPLAY 错误解决方法 摘要: 通过远程桌面在linux下执行java图形化程序时报错Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':1.0' as the value of the DISPLAY variable.。本文是关于该错误的分析和解决方法。 阅读详情

情境:

java web程序中,页面包含图形的展示,是使用jfreechart来开发的。war包部署在RHEL 5.5环境下的tomcat中。

1 在服务器(服务器默认启动为图形界面)本机上启动tomcat,在客户端浏览器上查看jfreechart图形正常;

2 远程通过ssh启动服务器上的tomcat,在客户端浏览器上查看jfreechart图形为小红叉;

 

 

先将异常部分贴出:

 

java.lang.InternalError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.

at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)

at sun.awt.X11GraphicsEnvironment.access$000(X11GraphicsEnvironment.java:53)

at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:142)

at java.security.AccessController.doPrivileged(Native Method)

at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:131)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:164)

at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)

at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:96)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:164)

at java.awt.Toolkit$2.run(Toolkit.java:821)

at java.security.AccessController.doPrivileged(Native Method)

at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:804)

at javax.swing.UIManager.initialize(UIManager.java:1236)

at javax.swing.UIManager.maybeInitialize(UIManager.java:1219)

at javax.swing.UIManager.getDefaults(UIManager.java:529)

at javax.swing.UIManager.getColor(UIManager.java:563)

at org.jfree.chart.JFreeChart.<clinit>(JFreeChart.java:261)

at org.jfree.chart.ChartFactory.createLineChart(ChartFactory.java:1242)

at cfca.xfraud.management.service.activity.ActivityStatisticsService.getEntityForm(ActivityStatisticsService.jav

a:325)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:592)

at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)

at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:

182)

…………分析以上异常已足够,剩下的异常栈信息忽略。

 

 

 

经过研究,发现该问题更深一步是这样:

1 如果以init 5的级别启动REHL 5.5系统,再启动tomcat,在客户端浏览器上查看jfreechart图形,图形显示正常;

2 如果以init 3的级别启动RHEL 5.5系统,再启动tomcat,在客户端浏览器上查看jfreechart图形,图形显示为小红叉;

 

 

这是很重要的结论,这个错误是因为图表程序是通过AWT实现的,AWT会调用操作系统本地窗口资源绘图,windows对此支持很好,

在linux下如果没有进到X window,AWT就不能绘图。

 

而且,通过查看异常的堆栈,发现at org.jfree.chart.JFreeChart.<clinit>(JFreeChart.java:261)这个异常,此时查找jfreechart官网的作者对该问题的解答:Web-Applications cannot have a Swing-GUI.也就是说,JFreechart采用AWT来绘图,如果没有图形界面,jfreechart里面所用到的

 

java.awt.Toolkit

java.awt.Color

java.awt.Rectangle

java.awt.Font

java.awt.FontMetrics

java.awt.image.ColorModel

 

等一系列包,均不能够使用。


 

使用了tomcat远程调试,将项目中所使用的jfreechart-1.0.13.jar源码下载,发现确实是跟踪到这行报错:

JFreeChart chart = ChartFactory.createLineChart("交易量统计图", "时间(" + units + ")" + time, "数量", dataset, PlotOrientation.VERTICAL, true, false, false);

 

createLineChart方法里面会调用的JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,plot, legend);

而JFreeChart.DEFAULT_TITLE_FONT是public static final Font DEFAULT_TITLE_FONT = new Font("SansSerif", Font.BOLD, 18);

也就是说,用了awt的Font类。因为JFreeChart(String title, Font titleFont, Plot plot,boolean createLegend) 这个构造函数,本来就用的是Font,修改源码的方式可能会很麻烦,作罢。

 

问题应该已经研究的很清楚了。

(http://www.jfree.org/phpBB2/viewtopic.php?p=58565&sid=96ed91d7c0d71ba11e988201cbaafb47 jfreechart网站)

 

 

网上关于Can't connect to X11 window server的解决方案如下:

1 export DISPLAY=:0,然后重启服务器

   已验证,无效。


2 在JVM中加入-Djava.awt.headless=true 

   对于tomcat ,可以修改catalina.sh,加入:CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true" 

   已验证,无效

 

自己研究的解决方法:

 

3 调用ChartUtilities.writeChartAsPN

   将每个chart存为图片到硬盘上,然后通过页面加载,这种方法,勉强解决该问题,但必须修改程序。

 

4 修改tomcat的startup.sh

   加入export CATALINA_OPTS="-Djava.awt.headless=true",问题得到完美解决。

   也就是说,init 3启动级别下,这种方式可以解决java awt的问题。

 

 

 

 

 

 

【终极!!!】cannot connect to X server, couldnt connect to display 这个问题不知道会不会折腾你一天,反正会折腾我一天! 用尽一切x server, ssh各种折腾都不管用的根源!!如下: 把你的C,,,L,,,O,,,U,,,D,,,S,,,,S之类的FQ软件卸了。重启电脑!!或者其他你不应该用的代理软件。如果你跟我一样是使用公司VPN上网的话!!!!! ... 阅读详情

相关推荐

高数 | 【极限与等价无穷小】两个重要极限 & 经典错误 & 什么情况下求极限可以直接带入

一. 第一个重要极限 二. 第二个重要极限 三. 导数定义式 全文见【高等数学】两个重要的极限 - 知乎

"You are worthy! You can do it!" 6万+

出现:Can‘t connect to X11 window server using “:0.0“ as the value of the DISPLAY variable的解决方案

首先需要执行:所有安全令牌;将命令输出的认证令牌添加到root用户;设置 DISPLAY 变量。

weixin_45118229的博客 9413

手把手教你用STM32F103C8T6驱动CLRC663国产NFC模块(兼容A/B/F/15693卡)

本文详细介绍了如何使用STM32F103C8T6驱动国产CLRC663 NFC模块,支持ISO14443A/B、Felica和ISO15693协议。从硬件设计、协议适配到状态监控,提供完整的工程实现方案,适用于智能门锁、支付终端等应用场景。

weixin_30689307的博客 446

报错解决:Can‘t connect to X11 window server using……

报错解决:Exception sending context initialized event to listener instance of class org.apache.myfaces.webapp.StartupServletContextListener: java.lang.InternalError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.

1万+

海康视觉平台VisionMaster实战入门:从通讯配置到工具应用

本文为海康VisionMaster视觉平台实战入门指南,详细介绍了从软件安装准备、与PLC等外部设备的通讯配置,到匹配定位、测量、畸变矫正等核心工具的应用方法。通过实战案例拆解,帮助工程师快速掌握如何搭建完整的机器视觉检测与引导定位系统,实现工业自动化项目落地。

weixin_29224309的博客 1018

中小团队必看!用Harbor+Jenkins打造轻量级K3S交付流水线(含成本优化方案)

本文为中小团队详细介绍了如何利用K3S、Harbor与Jenkins构建一套高性价比的自动化交付流水线。内容涵盖单节点K3S集群的效能配置、Harbor镜像仓库的磁盘空间优化、Jenkins共享库实现流水线复用,并提供了完整的实战案例与成本优化方案,帮助团队以较低成本快速落地高效的自动化部署。

weixin_29223603的博客 504

Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable解决方法

项目环境:AIX,tomcat7,JDK1.7 项目背景:该项目在登录页面中有个输入校验码的功能,校验码图片是Java使用图形处理生成的,调用了本地的图形处理库。在利用Java作图形处理(比如:图片缩放,图片签名,生成报表)时,如果运行在windows上不会出问题。如果将程序移植到Linux/Unix上的时候有可能出现图形不能显示的错误。 错误信息:"Can't connect to X11 w...

冰零0o的博客 7527

相机标定原理与张氏标定法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

heeweii的博客 2280

帆软报表打不开 Can't connect to X11 window server的问题研究

Can’t connect to X11 window server 本人使用的是帆软6.5 公司购买了源码但是有时候会出现打不开的问题 ,平时都是报错找不到帆软的fr-server.jar 一直认为是包坏了,偶尔一个报错Can’t connect to X11 window server。发现了问题. 解决方法: 修改tomcat的startup.sh 加入export CATALINA_O...

jingleifan的博客 1595

【自适应调制】自适应调制解调通信链路误码率matlab仿真与分析

BPSK中的B是“Binary”的意思,也就是有两个变化状态,比如说相位上的“+90°(代表1)、-90°(代表0)”,一个状态代表的就是一个比特。QPSK的“Q”是“Quadrature”的意思,有四个变化状态,如相位上的“+45°(代表00)、-45°(代表11)、+135°(代表10)、-135°(代表01)”,那么一个状态就代表两个比特的信息,如图2所示。同理8PSK的一个状态代表三个比特。但是功率资源并不是无限的,基站总的发射功率是一定的,为了充分利用所有的功率,采用的就是AMC技术。

FPGA/MATLAB学习教程/源码/项目合作开发 1833

久坐不慌,健康护航 —— 智能震动提醒坐垫的设计与实现

硬件核心:选用 ESP32 为主控,HX711 + 应变片实现精准压力检测,8050 三极管驱动震动马达,锂电池 + TP4056 满足便携供电需求;软件逻辑:核心是 “压力阈值判断 + 时间计时”,达到久坐阈值后触发震动提醒,流程图清晰体现了循环检测、状态重置的核心逻辑;代码特性:代码注释完善,阈值可灵活调整,支持串口调试,新手可直接编译烧录并根据实际场景校准。

weixin_42300449的博客 401

(转载)Can't connect to X11 window server的问题研究(转载)

https://blog.csdn.net/xgjianstart/article/details/82985459 情境: java web程序中,页面包含图形的展示,是使用jfreechart来开发的。war包部署在RHEL 5.5环境下的tomcat中。 1 在服务器(服务器默认启动为图形界面)本机上启动tomcat,在客户端浏览器上查看jfreechart图形正常; 2 ...

b14711687705320的博客 352

【数据集】GPM IMERG Daily Precipitation Dataset

GPM IMERG Daily Precipitation Dataset

WW、forever的博客 1220

Can't connect to X11 window server using 'localhost:0.0' 的解决

安装Oracle时出现如下错误[oracle@localhost database]$ ./runInstallerStarting Oracle Universal Installer...Checking installer requirements...Checking operating system version: must be redhat-3, SuSE-9, red

FurtherChan 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

linux tomcat 启动报错 Can't connect to X11 window server

java在图形处理时调用了本地的图形处理库。在利用Java作图形处理(比如:图片缩放,图片签名,生成报表)时,如果运行在windows上不会出问题。如果将程序移植到Linux/Unix上的时候有可能出现图形不能显示的错误。 提示信息:"Can't connect to X11 window server"这是由于Linux的图形处理需要一个X Server服务器。 解决办法: 1.如果服务器上...

biankudingcha的专栏 2328

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

can i win java,Can't connect to X11 window server using ':1.0' as

错误:Xshell远程连接或者本地Linux OS下启动java程序报错:No X11 DISPLAY variable was set,或者 Can'tconnecttoX11windowserverusing':1.0'asthevalueoftheDISPLAYvariable.错误详情:[root@neokylinimport_jre]#./run_linu...

weixin_42126865的博客 1536

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

No protocol specified Exception in thread "main" java.awt.AWTError: Can't connect to X11 window serv

No protocol specified Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':1.0' as the value of the DISPLAY variable. at sun.awt.X11GraphicsEnvironment.initDisplay...

wyqwilliam的博客 1万+

在linux上安装oracle出现Can't connect to X11 window。。。的问题

在centos上安装oracle时,在安装之前把需要的包安装好、把环境设置好后,su 到oracle用户,用oracle之行oracle的安装程序时出现异常,提示Cant connect to X11 window。。。解决方法是退出,然后用oracle直接登录,之行安装程序就好了。不能使用root登录,在su到oracle。

aktsoso的专栏 5139

Can't connect to X11 window server using ':1.0' as

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34315189的博客 2105

Linux上 Can't connect to X11 window server using XX as the value of the DISPLAY 错误解决方法

在Linux上运行需要图形界面的程序时出现如下错误提示: No protocol specified Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':1.0' as the value of the DISPLAY variable. at sun.aw...

davis_1234的博客 2362

项目上线那些事之Can't connect to X11 window server异常

Can’t connect to X11 window server今天项目上线测试,开发环境是windows7+JDK8+tomcat8生产环境是 centos6.8+JDK8+tomcat8在本机测试没问题,然后部署到服务器,发现一个奇怪的异常 Can't connect to X11 window server using '0.0' as the value of the DISPLAY v

只有变秃 才能变强 9206

Linux上 Can't connect to X11 window server 错误解决方法

 Exception in thread "main" java.lang.InternalError: Cant connect to X11 window server using localhost:11.0 as the value of the DISPLAY variable. at sun.awt.X11GraphicsEnvironment.initDisplay(Nat

龙的天空 1万+

Can't connect to X11 window server

部署一web应用程序时,总是提示如下错误:java.lang.InternalError:Can't connect to X11 window server using '127.0.0.1:0' as the value of the DISPLAY variable. 该问题的出现是和Linux系统有关的,这和java处理图形的方式有关系.默认情况下java在使用绘图函数时必须要连接到x1...

Asix 402
上一篇: MyEclipse下远程调试Tomcat
下一篇: MyEclipse 中Tomcat部署项目:Undefined exploded archive location
oooooooooooooaaa
博客等级 码龄18年 12粉丝 30原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值