簡體   English   中英

Java WebService上的java.awt.HeadlessException

[英]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 GunicsWindows Server 2008 R2 + RDP上也面臨着同樣的問題 ,他從打開Java的URL中 獲得了@Andrea Turri的答案 您也可以嘗試一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM