2011-03-09 116 views
0

我有一個Swing應用程序作爲jar文件。Java jar輸出。它在哪裏?

我以兩種方式啓動應用程序。

  1. 在命令提示符下java -jar app.jar。啓動&工作正常。

  2. 雙擊app.jar。如預期的那樣,無法正常工作。某處失敗了。

會是什麼問題?

如果直接運行jar,將會打印日誌(System.out.println())。

我有很多sysout。會導致問題嗎?

任何人都請在這方面提供幫助。

回答

0

雙擊jar會調用javaw(java-window mode)來運行jar中manifest.mf中定義的主類,因此system.out將無法看到。

我建議用一個函數替換System.out.println調用,例如,

public static void log(String text) 
{ 
    System.out.println(text); 
    // log it to some file 
    writeToFile(text); 


} 

這將確保日誌行將被打印到文件中,這可以用於調試目的。一個注意事項是printStackTrace不會在那裏打印!

+0

我想使用上述標準的記錄比較好,但如果用類似上述重寫的System.out的PrintStream ,你甚至可以得到printStackTrace()去一個文件。 – 2011-03-09 05:07:05

1

如果通過雙擊運行jar,您將無法看到System.out.println()的輸出。您可以從命令行運行該程序,在該命令行中輸出標準輸出,也可以將輸出寫入文件並稍後檢查。

我建議使用Apache Log4j進行記錄。

0

我還建議記錄(我將要建議的)。儘管如此,可信任的(或「無沙箱」)應用程序可以將System.out重定向到最有用的任何位置。例如。您可能會將其指向ByteArrayOutputStream。當需要結果時,將BAOS的全部內容寫入文本區域,或者您自己的服務器,或者..無論你喜歡什麼。


同樣的事情可以用日誌記錄進行。我有UI將日誌消息添加到最終用戶可查看幷包含在錯誤報告中的列表。日誌記錄很容易配置爲詳細程度和應用程序的哪些部分。密切關注(通過允許不同類別的日誌記錄級別)。

System.out.print(ln)是而不是易於配置以提取特定的細節。這可能會導致大量不相關的輸出。

0

雙擊app.jar。啓動,但 無法正常工作。 某處失敗。

您是否將應用程序的入口點設置在清單文件中?

PS: - 也同時發佈雙擊app.jar您得到您的錯誤信息,