如果调用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)
....
现在我的问题是,当测试系统上的一切正常时,为什么我会收到此错误?如何解决此问题?
答案 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回答的解决方案。你也可以试试这个。