2015-02-12 24 views
8

Giả sử tôi đã tạo ra một executable jar từ một mã mà tôi đã sử dụngĐiều gì xảy ra với "System.out.println()" trong jar thực thi?

System.out.println() 

Khi chúng tôi chạy jar thực thi, không có giao diện điều khiển. Vì vậy, những gì sẽ xảy ra với dòng này? java xử lý tình huống này như thế nào?

EDIT 01:

LƯU Ý: Tình hình là khi tôi không sử dụng một giao diện điều khiển để chạy các jar cũng không liên kết bất kỳ giao diện điều khiển với nó dù sao đi nữa.

EDIT 02: Làm mọi thứ rõ ràng hơn:

Tôi biết rằng không có gì sẽ được in bất cứ nơi nào như không có giao diện điều khiển ..! Tôi muốn biết cách java xử lý dòng này trong trường hợp này như thế nào? Dòng này có bị bỏ qua khi tạo bytecode cho một jar thực thi không? Hoặc là dòng này chỉ bị bỏ qua khi không có giao diện điều khiển? Hoặc bất cứ điều gì ...

+0

"Khi chúng tôi chạy jar thực thi, không có giao diện điều khiển" - cũng điều đó phụ thuộc vào cách bạn chạy nó. Nếu bạn chạy 'java -jar foo.jar' từ một giao diện điều khiển, sau đó có ... –

+0

Tôi có nghĩa là đang chạy không sử dụng bảng điều khiển ... – minarmahmud

+0

Sau đó, nó đáng để làm cho câu hỏi của bạn rõ ràng hơn. Bạn đã tuyên bố rằng không có bàn điều khiển, khi đó chỉ là * đôi khi * đúng. –

Trả lời

1

Tôi bạn mở nó từ bảng điều khiển (java -jar YourJar.jar) văn bản được in trong cửa sổ bảng điều khiển của bạn.

Nếu bạn mở nó trong trình duyệt (hoặc tương tự), bạn sẽ không thấy văn bản

Để làm rõ Sửa thứ hai của bạn: Bytecode không bỏ qua, bởi vì trình biên dịch có thể không biết trong những ngữ cảnh bình sẽ được thực hiện. Bình có thể luôn được gọi từ bàn điều khiển, trong trường hợp đó println phải ở đó.

Thực tế, nhiều tệp jar sẽ hoàn toàn vô dụng nếu không. Có rất nhiều chương trình Java tương tác với người dùng bằng giao diện điều khiển trong và đầu ra. Đó là không phải cần thiết cho Chương trình java để có GUI (hoặc chạy hoàn toàn dưới nền).

+1

anh ấy hỏi rõ ràng điều gì xảy ra với văn bản –

+0

@minarmahmud Tôi đã chỉnh sửa câu trả lời của tôi, có thể điều này sẽ giúp bạn – DiscoStu

5

Không có gì đặc biệt về việc chạy mã trong tệp jar thực thi. Nếu bạn chạy nó từ bảng điều khiển, ví dụ: với java -jar foo.jar đầu ra sẽ vẫn chuyển đến bảng điều khiển.

Nếu bạn chạy mã theo cách nào đó không đính kèm bảng điều khiển - chẳng hạn như javaw trên Windows, là chương trình mặc định được liên kết với tệp jar thực thi - thì đầu ra sẽ không đi đâu cả. Nó sẽ không gây ra bất kỳ lỗi nào - văn bản sẽ bị mất.

Lưu ý rằng trong trường hợp đó, nếu bạn sử dụng System.console() thay vào đó, rằng sẽ trở lại null. Vì vậy:

System.out.printf("Foo%n"); // No problem. Goes nowhere. 
System.console().printf("Foo%n"); // Would throw a NullPointerException. 
+0

* văn bản sẽ bị mất *. Vì vậy, tôi có thể giả định rằng phương thức 'println()' này được viết theo cách mà nếu không có bàn điều khiển, cuộc gọi sẽ bị bỏ qua? – minarmahmud

+2

@minarmahmud: Cũng không * bỏ qua * - Tôi nghi ngờ nếu bạn sử dụng 'printf' và có một số chuỗi định dạng không hợp lệ, điều đó sẽ thất bại, ví dụ. Nhưng đầu ra sẽ không đi đâu cả. –

2

Đầu ra được bỏ qua, miễn là bạn không chạy ứng dụng từ cửa sổ bảng điều khiển (java -jar executable.jar). Hơn nữa, bạn có thể cấu hình cài đặt Java của bạn như vậy, một cửa sổ bàn điều khiển được khởi chạy ngay khi bạn khởi động một ứng dụng Java. Đầu ra sẽ được ghi vào cửa sổ giao diện điều khiển của JVM sau đó. Bạn có thể tìm thấy một bài viết How do I enable and view the Java Console? trên trang web chính thức của Java.

Activate Java console

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