【问题标题】:java.awt.HeadlessException on a Java WebServiceJava WebService 上的 java.awt.HeadlessException
【发布时间】:2015-01-16 19:34:18
【问题描述】:

如果调用 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;
}

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

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

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

【问题讨论】:

  • 你的目标运行时系统是什么?是 Windows 还是 Linux 还是别的什么?
  • 我已经更新了我的答案,提供了一种替代解决方案来支持多个目标环境并删除 HeadlessException。 看看它。
  • 它是 WindowsServer 2008 R2;我会尝试你的替代解决方案
  • 我还添加了另一个链接,可以解决 windows server 2008 R2 + RDP 的问题。也来看看吧。我希望它可以帮助您解决您的问题。
  • 感谢您的帮助,但我没有解决我的问题。我找到了另一种方法,我将 URL 返回给客户端,然后他打开它。问题在于服务器没有 UI 环境。

标签: java web-services


【解决方案1】:

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

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

也许您还可以在此处查看有关 HeadlessException 的其他一些问题。

【讨论】:

  • 我的目标是有人调用他重定向到特定网站的 web 服务(在这个例子中只是 google.de),还是有更好的方法从 web 服务中调用网站?
【解决方案2】:

来自 Java 文档 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 并且他通过@得到了解决方案Andrea Turri 在Opening an URL from java 给出的答案。你也可以试试这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 2019-05-22
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多