Java WebService上的java.awt.HeadlessException

时间:2014-11-19 10:14:57

标签: java web-services

如果调用WebServer,我会尝试使用URL打开浏览器。 WebServer在Tomcat7上工作正常,我用Eclipse创建它。我在Eclipse服务器上测试了这个代码,并且每件事都没问题,并且打开了一个带有URL的新浏览器。

public java.lang.String register(java.lang.String username, java.lang.String password) throws java.rmi.RemoteException {
    try{
        Desktop.getDesktop().browse(new URI("http://google.de"));
    }catch(Exception e){ 
           StringWriter sw = new StringWriter();
           e.printStackTrace(new PrintWriter(sw));
           String exceptionAsString = sw.toString();
           username = exceptionAsString;
    }  
    return "NEW TOKEN:"+password + username;
}

但是如果我将代码作为war文件部署到" real" TomcatServer我收到此错误:( web服务正常,我成为返回值,但新浏览器未打开) 抛出错误,因为"真实"上的桌面不受支持Desktop.isDesktopSupported() == false服务器

java.awt.HeadlessException at java.awt.Desktop.getDesktop(Desktop.java:124)
....

现在我的问题是,当测试系统上的一切正常时,为什么我会收到此错误?如何解决此问题?

2 个答案:

答案 0 :(得分:0)

当您在本地测试它时,它的工作原理是因为本地环境具有UI。我怀疑“真正的”tomcat没有UI,因此无法执行任何与UI相关的任务。

为什么要在没有人会看到或与之交互的服务器上启动UI?你想要实现什么目标?您需要编写一种非交互式的方式来完成任务。

也许你还可以在这里查看一些关于HeadlessException的其他问题。

答案 1 :(得分:0)

来自Java doc HeadlessException

HeadlessException : Thrown when code that is dependent on a keyboard, display, or 
mouse is called in an environment that does not support a keyboard, display, or mouse.

您正在调用Desktop.getDesktop()方法&它不支持您的运行时环境。看Desktop getDesktop()

而不是检查

Desktop.isDesktopSupported() == false

你可以用这个

if(!Desktop.isDesktopSupported()){
    //do someting
}

支持多种目标环境的解决方案摆脱HeadlessException:

Desktop API is not supported on the current platform在这篇文章 @MightyPork 中有很好的解决方法来支持不同的操作系统&删除HeadlessException。你必须看看这个。

@Balazs Gunics 也面临同样的问题 Windows Server 2008 R2 + RDP &他在Opening an URL from java给出了得到@Andrea Turri回答的解决方案。你也可以试试这个。