[英]java.awt.HeadlessException on a Java WebService
如果調用了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文件部署到“真實的” TomcatServer中,則會收到此錯誤:(Web服務正常,並且我成為返回值,但新的瀏覽器未打開),將引發錯誤,因為桌面在“真實”服務器上不支持Desktop.isDesktopSupported() == false
java.awt.HeadlessException at java.awt.Desktop.getDesktop(Desktop.java:124)
....
我的問題是,現在在測試系統上一切正常時,為什么會出現此錯誤?我該如何解決此問題?
在本地對其進行測試時,它可以工作,因為本地環境具有UI。 我懷疑“真正的” tomcat沒有UI,因此無法執行任何與UI相關的任務。
為什么要在沒有人看到或交互的服務器上啟動UI? 您想達到什么目的? 您需要編寫一種非交互方式來完成任務。
也許您還可以在此處查看有關HeadlessException
的其他一些問題。
來自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()
方法,並且它不支持您的運行時環境。 查看桌面getDesktop()
而不是檢查
Desktop.isDesktopSupported() == false
你可以用這個
if(!Desktop.isDesktopSupported()){
//do someting
}
支持多個目標環境並擺脫HeadlessException的解決方案:
本文中的當前平台不支持桌面API , @ MightyPork有很好的解決方法來支持不同的操作系統並刪除HeadlessException。 你必須看看這個。
@Balazs Gunics在Windows Server 2008 R2 + RDP上也面臨着同樣的問題 ,他從打開Java的URL中 獲得了@Andrea Turri的答案 。 您也可以嘗試一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.