2012-11-02 28 views

Trả lời

9

Nếu mã Java của bạn thoát với System.exit(status), bạn có thể nhận được trạng thái trong Bash như thế này:

Java:

public class E { 
    public static void main(String[] args) { 
     System.exit(42); 
    } 
} 

Bash:

$ java E 
$ echo $? 
42 

$? là trạng thái thoát của quá trình hoàn tất cuối cùng.

+0

Có cách nào khác để nắm bắt trạng thái kể từ trong java System.exit() không phải là cách thông thường để thoát. – vino

+1

bạn có thể bắt trạng thái bằng cách sử dụng echo $ ?, ngay cả khi chương trình java không thoát với System.exit(), theo mặc định nó trả về trạng thái 0 (có nghĩa là Thành công) cho Hệ điều hành khi thoát khỏi chương trình bình thường. – Stauz

2

chương trình java phải kết thúc bằng Sytem.exit (trạng thái). Số này được trả về như bất kỳ lệnh nào khác trong hệ thống tác nhân.

0

Như người khác đã nêu, bạn cần sử dụng System.exit() để có được kết quả mong muốn. Lý do đằng sau điều này là System.exit() trực tiếp tạm dừng các chương trình và thoát trở về giá trị như được xác định.

Nếu bạn đang tự hỏi tại sao chúng ta không thể quay trở lại bất cứ điều gì từ phương pháp main, câu trả lời là - trong java main phương pháp không bao giờ trả về bất cứ điều gì, nếu bạn phân tích báo cáo kết quả theo yêu cầu vàng

public static void main() 

bạn sẽ thấy, trong java main có kiểu trả về là void. Vì vậy, nếu bạn đang kiểm tra trạng thái trả về của một chương trình java từ chương trình gọi (Shell trong trường hợp này), bạn đang cố gắng đọc trạng thái thoát của jvm chứ không phải chương trình java của bạn sẽ ở trạng thái bình thường điều kiện luôn luôn bằng không (0) thậm chí khó khăn nếu chương trình của bạn bị rơi do bất kỳ ngoại lệ nào. Bạn sẽ chỉ nhận được trạng thái thoát khác 0 nếu jvm gặp sự cố do các lý do không mong muốn như OutOfMemory hoặc điều gì đó tương tự quan trọng.

Hy vọng điều này sẽ giúp bạn hiểu rõ về trạng thái bắt thoát của chương trình java.

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