Sự khác biệt giữa 'java', 'javawv và' javaws '


184

Sự khác biệt giữa những gì java, javawjavaws?

Tôi tìm thấy trong Windows hầu hết Java được bắt đầu sử dụng javaw.


2
Đó là bởi vì Windows có thói quen khó chịu khi bắt đầu một Terminal thực sự (thậm chí không được gọi là "Terminal" ...) ở phía trước bất cứ khi nào bạn bắt đầu một chương trình java -cp .... Vì hầu như không ai muốn điều đó, javawlà lựa chọn để làm cho cửa sổ phiền phức đó biến mất.
Matthieu

Câu trả lời:


212

Xem tài liệu cho:

  • javalệnh 1 / javawlệnh 2
    1. Công javacụ khởi chạy một ứng dụng Java. Nó thực hiện điều này bằng cách bắt đầu một môi trường thời gian chạy Java, tải một lớp được chỉ định và gọi mainphương thức của lớp đó .
    2. Các javawlệnh giống hệt java, ngoại trừ việc với javawcửa sổ giao diện điều khiển không có liên quan. Sử dụng javawkhi bạn không muốn một cửa sổ nhắc lệnh xuất hiện.
  • javawslệnh , " lệnh Java Web Start "

    Các javawsvụ phóng lệnh Java Web Start, đó là việc thực hiện tham chiếu Java Network Launching Protocol (JNLP). Java Web Start khởi chạy các ứng dụng / applet Java được lưu trữ trên mạng.

    Nếu tệp JNLP được chỉ định, javawssẽ khởi chạy ứng dụng / applet Java được chỉ định trong tệp JNLP.

    Trình javawskhởi chạy có một bộ các tùy chọn được hỗ trợ trong bản phát hành hiện tại. Tuy nhiên, các tùy chọn có thể được loại bỏ trong một bản phát hành trong tương lai.

    Xem thêm Ghi chú phát hành JDK 9 API, tính năng và tùy chọn không dùng nữa :

    Các công nghệ triển khai Java không được chấp nhận và sẽ bị xóa trong một bản phát hành tương lai
    Chức năng Java Applet và WebStart, bao gồm API Applet, trình cắm Java, Trình xem ứng dụng Java, JNLP và Java Web Start, bao gồm cả javawscông cụ , đều bị phản đối trong JDK 9 và sẽ được gỡ bỏ trong một bản phát hành trong tương lai.


69

java: Trình thực thi ứng dụng Java được liên kết với bàn điều khiển để hiển thị đầu ra / lỗi

javaw: Trình quản lý ứng dụng ( cửa sổ Java ) không được liên kết với bàn điều khiển. Vì vậy, không hiển thị đầu ra / lỗi. Nó có thể được sử dụng để âm thầm đẩy đầu ra / lỗi sang tệp văn bản. Nó chủ yếu được sử dụng để khởi chạy các ứng dụng dựa trên GUI.

javaws: ( Java web start ) để tải xuống và chạy các ứng dụng web phân tán. Một lần nữa, không có giao diện điều khiển được liên kết.

Tất cả đều là một phần của JRE và sử dụng cùng một JVM.


Vì vậy, nếu tôi đã cài đặt JRE, javawcó nên trong PATH của tôi không? (Không phải vậy)
endolith

@endolith, cài đặt Java trên Windows, theo kinh nghiệm của tôi, không thêm bất cứ thứ gì vào biến PATH. Nếu bạn chỉ cài đặt JRE, có thể bạn sẽ phải thêm thư mục JRE / bin vào PATH theo cách thủ công; nếu bạn đã cài đặt JRE và JDK, thay vào đó, bạn sẽ thêm JDK / bin vào PATH.
mcduffee

9

java.exe được liên kết với bảng điều khiển, trong khi javaw.exe không có bất kỳ liên kết nào như vậy. Vì vậy, khi java.exe được chạy, nó sẽ tự động mở một cửa sổ nhắc lệnh trong đó các luồng đầu ra và lỗi được hiển thị.


6

Từ http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp?topic=%2Fcom.ibm.java.doc.user.aix32.60%2Fuser%2Fjava.html :

Lệnh javaw giống hệt với java, ngoại trừ javaw không có cửa sổ giao diện điều khiển liên quan. Sử dụng javaw khi bạn không muốn cửa sổ nhắc lệnh được hiển thị. Trình khởi chạy javaw hiển thị một cửa sổ với thông tin lỗi nếu nó không thành công.

Và javaws dành cho các ứng dụng khởi động web Java, applet hoặc đại loại như thế, tôi sẽ nghi ngờ.


Liên kết bị hỏng: "Trang được yêu cầu không tồn tại hoặc có thể đã bị di chuyển."
Peter Mortensen

1

Tôi đã kiểm tra rằng chuyển hướng đầu ra hoạt động với javaw:

javaw -cp ... mypath.MyClass ... arguments 1>log.txt 2>err.txt

Điều đó có nghĩa là, nếu ứng dụng Java in ra bất cứ thứ gì thông qua System.out hoặc System.err, thì nó được ghi vào các tệp đó, cũng như sử dụng java (không có w). Đặc biệt khi bắt đầu java, JRE có thể ghi lỗi bắt đầu (không tìm thấy lớp) trên đường ống đầu ra lỗi. Về mặt này, điều cần thiết là phải biết về lỗi. Tôi đề nghị sử dụng chuyển hướng giao diện điều khiển trong mọi trường hợp nếu javawđược gọi.

Ngược lại nếu bạn sử dụng

start java .... 1>log.txt 2>err.txt

Với lệnh Windows console start, chuyển hướng đầu ra của giao diện điều khiển không hoạt động javacũng như không javaw.

Giải thích tại sao lại như vậy: Tôi nghĩ rằng javawsẽ mở một quy trình nội bộ trong HĐH (sử dụng đầy đủ lớp java.lang.Process) và chuyển một chuyển hướng đầu ra đã biết sang quy trình này. Nếu không có chuyển hướng nào được đưa ra trên dòng lệnh, không có gì được chuyển hướng và quá trình bắt đầu bên trong javawkhông có bất kỳ đầu ra giao diện điều khiển nào. Hành vi cho java.lang.Process là tương tự. Máy ảo cũng có thể sử dụng tính năng nội bộ này javaw.

Nếu bạn sử dụng 'start', bảng điều khiển Windows sẽ tạo một quy trình mới để Windows thực thi lệnh sau khi bắt đầu, nhưng cơ chế này không sử dụng một chuyển hướng nhất định cho quy trình phụ đã bắt đầu, thật không may.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.