我有一個Swing應用程序作爲jar文件。Java jar輸出。它在哪裏?
我以兩種方式啓動應用程序。
在命令提示符下java -jar app.jar。啓動&工作正常。
雙擊app.jar。如預期的那樣,無法正常工作。某處失敗了。
會是什麼問題?
如果直接運行jar,將會打印日誌(System.out.println())。
我有很多sysout。會導致問題嗎?
任何人都請在這方面提供幫助。
我有一個Swing應用程序作爲jar文件。Java jar輸出。它在哪裏?
我以兩種方式啓動應用程序。
在命令提示符下java -jar app.jar。啓動&工作正常。
雙擊app.jar。如預期的那樣,無法正常工作。某處失敗了。
會是什麼問題?
如果直接運行jar,將會打印日誌(System.out.println())。
我有很多sysout。會導致問題嗎?
任何人都請在這方面提供幫助。
根據Java文檔:http://download.oracle.com/javase/6/docs/api/java/lang/System.html#out
「標準」 輸出流。這個 流已經打開並準備好接受輸出數據 。通常,這個流對應於由主機環境或 用戶指定的顯示輸出 或另一個輸出目的地 。
爲了記錄目的,請使用一些庫,例如log4j或Java Logging。
雙擊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不會在那裏打印!
如果通過雙擊運行jar,您將無法看到System.out.println()的輸出。您可以從命令行運行該程序,在該命令行中輸出標準輸出,也可以將輸出寫入文件並稍後檢查。
我建議使用Apache Log4j進行記錄。
我還建議記錄(我將要建議的)。儘管如此,可信任的(或「無沙箱」)應用程序可以將System.out重定向到最有用的任何位置。例如。您可能會將其指向ByteArrayOutputStream。當需要結果時,將BAOS的全部內容寫入文本區域,或者您自己的服務器,或者..無論你喜歡什麼。
同樣的事情可以用日誌記錄進行。我有UI將日誌消息添加到最終用戶可查看幷包含在錯誤報告中的列表。日誌記錄很容易配置爲詳細程度和應用程序的哪些部分。密切關注(通過允許不同類別的日誌記錄級別)。
System.out.print(ln)是而不是易於配置以提取特定的細節。這可能會導致大量不相關的輸出。
雙擊app.jar。啓動,但 無法正常工作。 某處失敗。
您是否將應用程序的入口點設置在清單文件中?
PS: - 也同時發佈雙擊app.jar您得到您的錯誤信息,
我想使用上述標準的記錄比較好,但如果用類似上述重寫的System.out的PrintStream ,你甚至可以得到printStackTrace()去一個文件。 – 2011-03-09 05:07:05