[JAVA] JasperReport 在 Linux 下面报 X11 的错误
今天把 SCP 系统转移到了 Linux 下面。报表引擎出现了问题:
具体表现是,运行报表引擎程序运行正常,但是 IE 里面显示一下错误:
1 | java.lang.InternalError: Can't connect to X11 window server using 'app:0,0' as the value of the DISPLAY variable. |
刷新后出现一下错误:
1 | java.lang.NoClassDefFoundError |
开始以为是找不到类的问题(不过居然找不到 Java 的标准类,汗-_-!),修改了 CLASSPATH、JAVA_HOME,解压缩 jar 包,把我认为的可能和这个相关的设置全部修改了一遍,但是问题依旧。
但是注意到最开始报错的是和 X11 相关的的部分,开始考虑从这个地方下手了。首先修改 DISPLAY 的环境变量,失败。
然后查资料得知,java-awt/swing 组件需要本地的 x-server,但是服务器上都是 SSH 控制,根本没有安装本地的x-server。解决方法如下:
对于 Java 1.4以上,启动java时加上 -Djava.awt.headless=true 的参数。对于 Java 1.4 以前,下载 xvfb 或者其他的虚拟 x-window 软件,再在 Java 运行环境里的 DISPLAY 作相应改变。
对于 Resin,具体的修改办法是,修改 httpd.sh 文件,把其中的 args= 行修改为 args=-Djava.awt.headless=true。
然后重新启动 HTTP 服务器,一切OK~
赞,居然真的有解决办法,真是强大。。。
[Reply]