2014-07-25 19 views
5

Đối với runnable Jar programs Tôi tạo, tôi có thể đọc các ngoại lệ chưa được xử lý nếu tôi chạy nó từ dấu nhắc lệnh (java -jar myprogram.jar).Làm thế nào để tạo các chương trình Jar runnable mà không thất bại âm thầm?

đang

Ví dụ:

public static void main(String args[]) { 
    try { 
     EntireProgram(); 
    } catch (Throwable t) { 
     throw new Error("somehow our error handling code has errors"); 
    } 
} 

public static void EntireProgram() { 
    System.out.println(1/0); 
} 

dòng lệnh đầu ra:

enter image description here

Tuy nhiên, nếu tôi chạy chương trình Jar bằng cách nhấp đúp nó (dự kiến ​​của hầu hết người dùng cuối cùng) , các ngoại lệ chưa được xử lý vẫn giữ nguyên im lặng. Tôi đã nhận thấy rằng đây là trái ngược với "chương trình Windows bản địa" mà tôi tin rằng có trường hợp ngoại lệ unhandled xử lý bởi bộ xử lý hệ điều hành mặc định (tin nhắn thoại modal):

enter image description here

enter image description here enter image description here

Các lợi thế của việc xử lý các ngoại lệ chưa được giải quyết theo cách này là người dùng sẽ biết một điều gì đó sai đã xảy ra (và có thể báo cáo điều đó, hy vọng).

Làm cách nào để tôi có thể xử lý ngoại lệ không được xử lý của chương trình theo cách như vậy?

Trả lời

1

Tại sao bạn không thêm một dòng như thế này trong khối catch của bạn .. điều này sẽ hiển thị cho bạn thông báo lỗi bất kể cách bạn chạy ứng dụng của mình.

javax.swing.JOptionPane.showMessageDialog(null,"Something is really wrong..Hence notifying you.."); 
+1

Tôi không nghĩ điều này sẽ hiệu quả. Tôi gặp khó khăn trong một vấn đề, nơi ứng dụng dựa trên 'swing' của tôi yêu cầu' Java1.6' trở lên, nhưng khi tôi đang thực thi ứng dụng đó trong phiên bản Java thấp hơn, nó không hiển thị bất cứ điều gì, thậm chí tôi đã đưa ra 'showMessageDialog' chặn, vì có lỗi gọi là 'ClassNotFoundError'. – Vishrant

+0

@ user3505725, Có * sẽ * vẫn là lỗi. Chúng tôi không thể mong đợi mã sẽ không có lỗi, do đó chúng tôi không thể mong đợi mã xử lý lỗi (showMessageDialog) bị lỗi. Làm thế nào để chúng ta thay đổi trách nhiệm của việc xử lý lỗi cho hệ điều hành? – Pacerier

Các vấn đề liên quan