อะไรคือความแตกต่างระหว่างjava
, javaw
และjavaws
?
ผมพบว่าภายใต้ Windows ส่วนใหญ่ของ Java javaw
จะเริ่มใช้
อะไรคือความแตกต่างระหว่างjava
, javaw
และjavaws
?
ผมพบว่าภายใต้ Windows ส่วนใหญ่ของ Java javaw
จะเริ่มใช้
คำตอบ:
ดูเอกสารประกอบสำหรับ:
java
คำสั่ง1 / javaw
คำสั่ง2
java
เครื่องมือเปิดตัวโปรแกรม Java ทำได้โดยเริ่มต้นสภาพแวดล้อมรันไทม์ Java โหลดคลาสที่ระบุและเรียกใช้main
เมธอดของคลาสนั้นjavaw
คำสั่งเป็นเหมือนjava
ยกเว้นว่ามีjavaw
หน้าต่างคอนโซลไม่มีที่เกี่ยวข้อง ใช้javaw
เมื่อคุณไม่ต้องการให้หน้าต่างพรอมต์คำสั่งปรากฏขึ้น
javaws
คำสั่งที่" Java Web Startคำสั่ง"
javaws
คำสั่งเปิดตัว Java Web Start ซึ่งเป็นดำเนินการอ้างอิงของเครือข่ายเปิดตัว Java Protocol (JNLP) Java Web Start เปิดตัวแอปพลิเคชัน / แอปเพล็ตที่โฮสต์บนเครือข่าย
หากระบุไฟล์ JNLPjavaws
จะเรียกใช้งาน Java application / applet ที่ระบุในไฟล์ JNLP ปล่อยมีชุดของตัวเลือกที่ได้รับการสนับสนุนในรุ่นปัจจุบัน อย่างไรก็ตามตัวเลือกอาจถูกลบในรุ่นอนาคตjavaws
โปรดดูAPI การเลิกใช้ฟีเจอร์และตัวเลือกของ JDK 9 Release Notes ที่เลิกใช้แล้ว :
เทคโนโลยีการปรับใช้ Java เลิกใช้แล้วและจะถูกลบในการทำงานในอนาคต
Java Applet และ WebStart รวมถึง Applet API, ปลั๊กอิน Java, Java Applet Viewer, JNLP และ Java Web Start รวมถึงjavaws
เครื่องมือทั้งหมดเลิกใช้ใน JDK 9และจะถูกลบออกในอนาคต
java: ตัวจัดการแอปพลิเคชัน Java ซึ่งเชื่อมโยงกับคอนโซลเพื่อแสดงเอาต์พุต / ข้อผิดพลาด
javaw: ตัวดำเนินการแอ็พพลิเคชัน( Java หน้าต่าง ) ไม่เกี่ยวข้องกับคอนโซล ดังนั้นจึงไม่มีการแสดงผลลัพธ์ / ข้อผิดพลาด มันสามารถใช้ในการผลักดันเอาต์พุต / ข้อผิดพลาดไปยังไฟล์ข้อความแบบเงียบ ๆ ส่วนใหญ่จะใช้เพื่อเรียกใช้แอปพลิเคชันที่ใช้ GUI
javaws: ( Java web start ) เพื่อดาวน์โหลดและเรียกใช้เว็บแอพพลิเคชันแบบกระจาย อีกครั้งไม่มีการเชื่อมโยงคอนโซล
ทั้งหมดเป็นส่วนหนึ่งของ JRE และใช้ JVM เดียวกัน
javaw
ควรอยู่ในเส้นทางของฉันหรือไม่ (ไม่ใช่)
java.exeเชื่อมโยงกับคอนโซลในขณะที่javaw.exeไม่มีการเชื่อมโยงใด ๆ ดังนั้นเมื่อรันjava.exeหน้าต่างจะเปิดหน้าต่างพรอมต์คำสั่งโดยอัตโนมัติซึ่งจะแสดงเอาต์พุตและสตรีมข้อผิดพลาด
คำสั่ง javaw เหมือนกับ java ยกเว้นว่า javaw ไม่มีหน้าต่างคอนโซลที่เชื่อมโยง ใช้ javaw เมื่อคุณไม่ต้องการให้หน้าต่างพรอมต์คำสั่งปรากฏขึ้น ตัวเรียกใช้ javaw แสดงหน้าต่างพร้อมข้อมูลข้อผิดพลาดหากล้มเหลว
และ javaws สำหรับแอปพลิเคชันเว็บเริ่มต้น Java, แอปเพล็ตหรืออะไรทำนองนั้นฉันก็สงสัย
ฉันได้ตรวจสอบว่าการเปลี่ยนเส้นทางผลลัพธ์ทำงานกับjavaw
:
javaw -cp ... mypath.MyClass ... arguments 1>log.txt 2>err.txt
หมายความว่าหากแอปพลิเคชัน Java พิมพ์อะไรผ่าน System.out หรือ System.err มันจะถูกเขียนไปยังไฟล์เหล่านั้นเช่นเดียวกับการใช้ java (โดยไม่ต้องw
) โดยเฉพาะอย่างยิ่งในการเริ่มต้นjava
JRE อาจเขียนข้อผิดพลาดในการเริ่มต้น (ไม่พบคลาส) บนไพพ์เอาต์พุตข้อผิดพลาด ในส่วนนี้จำเป็นต้องทราบเกี่ยวกับข้อผิดพลาด ฉันแนะนำให้ใช้การเปลี่ยนเส้นทางคอนโซลในทุกกรณีหากjavaw
มีการเรียกใช้
ในทางตรงกันข้ามถ้าคุณใช้
start java .... 1>log.txt 2>err.txt
ด้วยคอนโซลของ Windows start
คำสั่งเปลี่ยนเส้นทางคอนโซลการส่งออกไม่ได้ทำงานร่วมกับหรือด้วยjava
javaw
คำอธิบายว่าทำไมจึงเป็นเช่นนั้น: ฉันคิดว่าjavaw
เปิดกระบวนการภายในในระบบปฏิบัติการ (เพียงพอโดยใช้คลาส java.lang.Process) และถ่ายโอนการเปลี่ยนเส้นทางเอาต์พุตที่ทราบไปยังกระบวนการนี้ หากไม่มีการเปลี่ยนเส้นทางในบรรทัดคำสั่งจะไม่มีการเปลี่ยนเส้นทางใด ๆ และกระบวนการเริ่มต้นภายในสำหรับjavaw
ไม่มีคอนโซลเอาต์พุตใด ๆ พฤติกรรมสำหรับ java.lang.Process คล้ายกัน เครื่องเสมือนอาจใช้คุณสมบัติภายในนี้javaw
เช่นกัน
หากคุณใช้ 'เริ่ม' คอนโซล Windows จะสร้างกระบวนการใหม่สำหรับ Windows เพื่อดำเนินการคำสั่งหลังจากเริ่มต้น แต่กลไกนี้ไม่ได้ใช้การเปลี่ยนเส้นทางที่กำหนดสำหรับกระบวนการย่อยที่เริ่มต้นโชคไม่ดี
java -cp ...
ในเบื้องหน้าเมื่อใดก็ตามที่คุณเริ่มโปรแกรมด้วย เกือบจะไม่มีใครต้องการjavaw
มันเป็นทางเลือกที่จะทำให้หน้าต่างที่น่ารำคาญหายไป