我今天做了一個奇怪的問題......我會做,因爲它「值得一萬字」一個簡單的例子:d無法打開Java應用程序運行時如可執行的JAR
public class Application() {
public static void main(String[] args) {
try {
A a = new A(); // this may throw exceptions
// (which will cause an ExceptionInInitializerError)
} catch (Throwable t) {
JOptionPane.showMessageDialog(null, "Oooops!");
System.exit(1);
}
}
}
因爲它是一個Swing GUI的一個獨立的應用程序,我的目標是在任何問題的情況下給一個消息給用戶(在這種情況下,在啓動時)......以上代碼工作在Eclipse IDE,但是當我出口該項目作爲可執行jar通過雙擊它,好吧,它只是不會打開。
所以我嘗試用cmd與java -jar application.jar
執行它,並在shell中打印出有ExceptionInInitializerError
。
爲什麼不抓住這個錯誤嗎?
即使我指定catch (ExceptionInInitializerError e)
,它也不起作用。
編輯: 更深入的調試後,我發現,當兩個特定的異常發生,後者發生在前者的catch塊纔會出現這種問題。 我通過更改我在啓動時執行的一些檢查的順序來更正了此錯誤。
問題BTW應該不會發生,因爲它最初由JDBC驅動程序類名的volountary錯誤在靜態塊加載。
嗯,至少它讓我清楚地理解了爲什麼構造函數和靜態初始化塊不應該拋出異常:在拋出異常的類被許多類使用的情況下,它幾乎不可能調試,因爲它可能會變成很難發現課程何時加載。
什麼是堆棧跟蹤? – zeller
請確保類路徑中的類「A」 – mishadoff
您是否擁有主類的正確清單文件?這是否幫助:http://stackoverflow.com/questions/6348258/jar-file-failing-to-execute-with-nullpointerexception-when-it-runs-fine-unpacked – 18bytes