Unix/Linux下遇到java.awt.HeadlessException

问题描述

准备做一个截屏功能,要求在JSP提交前,对当前屏幕进行截图。public void snapShot() { try { Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize(); BufferedImage screenshot = (new Robot()).createScreenCapture( new Rectangle(0, 0, (int) dimension.getWidth(), (int) dimension.getHeight())); String fileName = this.fileName + "." + this.format; File file = new File(fileName); File parentFile = file.getParentFile(); if (parentFile != null && !parentFile.exists()) { parentFile.mkdir(); } ImageIO.write(screenshot, format, file); } catch (AWTException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }}实现截图的这段代码都很简单,具体的方法调用点,是放在servlet里面完成的。之后在windows系统tomcat容器上面完成了首次测试,截屏功能成功。但是项目移至aix系统weblogic容器后,截屏功能抛出以下异常:java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it. at sun.awt.HeadlessToolkit.getScreenSize(HeadlessToolkit.java:281) at ScreenCapture.main(ScreenCapture.java:23)在网上搜索了此种问题的相关解决方案,大致上有三种:1.export DISPLAY=127.0.0.1:0.02.-Djava.awt.headless=true3.利用PJA以上三种方案我都尝试过,但是都没能解决当前问题。唯独在startWebLogic.sh中加入-Djava.awt.headless=true时,抛出的异常没有“No X11 DISPLAY variable was set, but this program performed an operation which requires it.”这句话。在此请教各位,这个问题该怎么解决,谢谢。 问题补充:cloverprince 写道

解决方案

能给个演示用的url吗?我访问一下。
解决方案二:
首先,你截的一定是服务端的屏,至于你说的测试成功,不管别人信不信,反正我是不信在aix下运行不成功,估计是因为服务器不但没有显示器,甚至连显卡都没有截图的原理我没研究过,猜测应该是把显存里德数据拿出来。因此没有显卡必然出错。
解决方案三:
不可能!!!!你竟然做到了!!!!那我平时一边看艳照一边上网的习惯要改改了!!!!!!!太可怕了!!!!!!!!!话说你真的没有看错吗?
解决方案四:
你说是JSP提交,所以客户端应该是浏览器。服务器没有控制浏览器截图的权利。另一方面,也不是所有的客户端都是图形界面的。(比如搜索引擎)Servlet运行在服务器上。如果可以截屏,截的也是服务器的屏。当然,大多数服务器都没有图形界面。所以,简单的说,做不到。
解决方案五:
要截客户端的屏还是服务器的屏?

时间: 2024-08-31 15:06:53

Unix/Linux下遇到java.awt.HeadlessException的相关文章

linux下使用java.awt,程序无法进入构造方法。求解

问题描述 weblogic8,jdk1.42(别骂我,老项目在改造)在windows下使用正常,但是部署到linux下,图像显示的类无法进入构造方法.个人猜测是使用了java.awt包导致的,于是在startWeblogic.sh配置了-Djava.awt.headless=true结果还是无效.具体的类如下:packagecom.estar.util.image;importjavax.imageio.ImageIO;importjavax.imageio.IIOException;impor

在Unix/Linux上令(java)JVM支持中文输出

unix|中文 原文: 在Unix/Linux上令(java)JVM支持中文输出 一.在Unix/Linux上令JVM支持中文输出 如果用户使用的是UNIX的远程服务器,就会遇到中文字体在图像中输出的问题,特别是由于许多管理员并不喜欢把主机的locale定为zh(因为意味着可能出乱码或必须装微形图形终端象zhcon,但很多情况下这样的条件并不具备).大部分程序员的JAVA经验苟限于JSP脚本程序,部分熟练的程序员大概开发过中间件.servlet.applet或在WINDOWS上运行的GUI程序.

Linux下启动java程序的通用脚本sh

在网上找到一个挺好的通用shell脚本. 只需要修改一些配置变量,就可以用来做起动脚本了. 并且除了能起动.还支持关闭.重启.查看是否正在运行的功能. 原文地址:http://www.tudaxia.com/archives/10 start函数中,nohup部分其实也可以提出来放入一个配置变量中.这里没有修改直接贴上作者的原文 #!/bin/sh #该脚本为Linux下启动java程序的通用脚本.即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用. #

linux下eclipse·java路径问题

问题描述 linux下eclipse·java路径问题 发行版 archlinuxeclipse版本4.4.2jdk版本java se1.8,java8-open-jdk后面测试了一下ubuntu/javase1.7也不行 学习时发现,需要的图片无法载入,开始以为是自己打错了,检查无果后拷贝来样版文件,依旧无法载入!怎么办?难道linux下路径的写法不一样?!「之前的音频文件倒是正常的,但图片却不行」求解附上模板http://pan.baidu.com/s/1o6tC18A文件在project

总结UNIX/LINUX下C++程序计时的方法_C 语言

前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确测量程序的运行时间并不容易,因为进程切换.中断.共享的多用户.网络流量.高速缓存访问及转移预测等因素都会对程序计时产生影响. 下面看看小编为大家整理几个计时方法 方法一: 如果是想统计某个程序的运行时间,那么可以使用 time ./a.out 方法二: 如果是想对某个函数或者语句进行计时,那么有别的方法.比如说,gettimeofday函数.直接贴示例代码: #include <sys/time.h> v

Linux下执行Java服务程序

nohup命令 普通进程用&符号放到后台运行,如果启动该程序的控制台logout,则该进程随即终止. 要实现守护进程,一种方法是按守护进程的规则去编程(本站有文章介绍过),比较麻烦:另一种方法是仍然用普通方法编程,然后用nohup命令启动程序: nohup <程序名> & 则控制台logout后,进程仍然继续运行,起到守护进程的作用(虽然它不是严格意义上的守护进程).使用nohup命令后,原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用,实现

linux下,java调用dll文件时,dll应该放在哪

问题描述 windows下,java调用dll文件时,dll放在system32这个文件夹下面,那linux下,dll文件应该放在哪? 问题补充:radio123 写道 解决方案 楼主要伤心了 linux底下应该不能直接调用dll 二进制格式不一样解决方案二:你们有谁做过把网页生成图片的功能吗,我提问很久了,都没人搭理我,我在windows下行,在linux下就不行了解决方案三:其实我也是啊,一个功能好不容易实现了,但是linux下不能运行,郁闷死了解决方案四:这个还真没有,还是借助网上力量搜索

linux下执行java程序的sh脚本分享_java

今天大概耗费了快一天的时间研究怎么用脚本执行java程序,终于实现了,分享一下 (1)在linux下写一个.sh文件 (2)文件内容如下: 复制代码 代码如下: #!/bin/sh         //bash文件头 APP_HOME=/home/blmcrm/crm/A      //要执行的java文件中bin文件的上一个目录,我的目录是/home/blmcrm/crm/A/bin/blm......(后面不写了),总之就是写bin目录前面的部分,因为jar包在bin目录里面,如果不在bin

如何在Linux下实现Java调用C语言编写的程序

问题描述 我在Linux下有一个已经用C语言写好,并编译生成的可执行的加密程序.现在我想在java程序中调用这个C程序.我现在是这样做的:用一个shell脚本运行这个加密程序,Java程序则负责调用shell脚本.Processrt=Runtime.getRuntime().exec("sh/opt/crypt");shell脚本在终端里可以运行,但是写在java程序里就不能运行了.请问,该怎么实现呢? 解决方案 解决方案二:不要格成3道程序,不麻烦吗?你把c程序编译成.so.然后用J