Computer >> คอมพิวเตอร์ >  >> การแก้ไขปัญหา >> ข้อผิดพลาดของ Windows

แก้ไข:ไม่พบหรือโหลดคลาสหลัก

ข้อผิดพลาด 'ไม่พบหรือโหลดคลาสหลัก ’ เกิดขึ้นเมื่อใช้คำสั่ง java ในพร้อมท์คำสั่งเพื่อเรียกใช้โปรแกรม Java โดยการระบุชื่อคลาสในเทอร์มินัล สาเหตุส่วนใหญ่เกิดจากความผิดพลาดในการเขียนโปรแกรมของผู้ใช้ในขณะประกาศคลาส

แก้ไข:ไม่พบหรือโหลดคลาสหลัก

ดังที่กล่าวไว้ก่อนหน้านี้ ข้อผิดพลาดนี้ส่วนใหญ่ไม่เกี่ยวข้องกับระบบ และผู้ใช้ทำผิดพลาดในหลาย ๆ สถานการณ์ดังที่แสดงด้านล่าง ก่อนที่จะก้าวไปข้างหน้า เราคิดว่าคุณมีความรู้พื้นฐานเกี่ยวกับภาษาการเขียนโปรแกรม Java และวิธีการทำงาน

อะไรทำให้เกิดข้อผิดพลาด 'ไม่พบหรือโหลดคลาสหลัก' ใน Java

ข้อความ 'ไม่พบหรือโหลดคลาสหลัก' หมายความว่าขั้นตอนแรกของเอ็นจิน Java ดึงคลาสสำหรับการดำเนินการล้มเหลว คำสั่งจาวา ไม่สามารถค้นหา คลาสที่ไดเร็กทอรีที่ถูกต้อง

ในบางกรณี คุณต้องเพิ่ม เส้นทางไฟล์ที่ถูกต้อง และชี้เทอร์มินัล Java ไปยังตำแหน่งที่ถูกต้อง เนื่องจากคุณกำลังดำเนินการคำสั่งจากเทอร์มินัลบรรทัดคำสั่ง คอมพิวเตอร์ไม่ทราบว่าจะพบคลาสใดหรืออยู่ที่ใด ใน IDE ที่เป็นเป้าหมาย นี่ไม่ใช่ปัญหาเนื่องจาก IDE จะคอยชี้ไปที่ไดเรกทอรีการทำงานปัจจุบัน

ไวยากรณ์ 'java ' คืออะไร

ก่อนที่เราจะเริ่มแก้ไขปัญหาว่าทำไมเทอร์มินัลส่งข้อผิดพลาดกลับมาให้เราเมื่อพยายามดำเนินการ ก่อนอื่นเราต้องดูไวยากรณ์ของคำสั่งก่อน หากคุณไม่ได้ใช้ไวยากรณ์ที่ถูกต้อง คุณจะพบกับข้อผิดพลาดนี้อย่างหลีกเลี่ยงไม่ได้

ไวยากรณ์ปกติของคำสั่งมีลักษณะดังนี้:

 java [ <option> ... ] <class-name> [<argument> ...]

ที่นี่

ตัวอย่างของคำสั่งที่ถูกต้องคือ:

java -Xmx100m com.acme.example.ListAppuals kevin arrows bart

คำสั่งดังกล่าวจะทำให้คำสั่ง java ดำเนินการดังต่อไปนี้:

  • จะค้นหาเวอร์ชันที่คอมไพล์ของคลาส com.acme.example.ListAppuals ’.
  • ค้นหาเสร็จแล้วจะโหลดคลาส
  • ถัดไป เมื่อคลาสถูกโหลด คลาสจะถูกค้นหาสำหรับเมธอด 'main' ที่มีลายเซ็นที่ถูกต้อง ตัวปรับแต่ง และประเภทการส่งคืน ตัวอย่างคลาสหลักจะเป็นดังนี้:
public static void main(String[])
  • เมธอดนี้จะถูกเรียกด้วยอาร์กิวเมนต์ 'kevin', 'arrows' และ 'bart' เป็นสตริง[]

วิธีแก้ไข 'ไม่พบหรือโหลดคลาสหลักไม่พบ'

โซลูชันที่ 1:การตรวจสอบอาร์กิวเมนต์ชื่อคลาส

ข้อผิดพลาดที่พบบ่อยที่สุดที่ผู้ใช้ทำคือระบุชื่อคลาสผิดเป็นอาร์กิวเมนต์ (หรือชื่อคลาสที่ถูกต้องเป็นรูปแบบที่ไม่ถูกต้อง) เนื่องจากเรากำลังประกาศพารามิเตอร์บนบรรทัดคำสั่ง จึงมีโอกาสสูงที่คุณจะส่งอาร์กิวเมนต์ชื่อคลาสในรูปแบบที่ไม่ถูกต้อง เราจะแสดงรายการสถานการณ์ที่เป็นไปได้ทั้งหมดที่คุณสามารถทำผิดพลาดได้

  • การเขียน ชื่อคลาสอย่างง่าย . หากคุณประกาศคลาสในแพ็คเกจ เช่น 'com.acme.example' คุณต้องใช้ ชื่อเต็มของคลาส รวมถึงแพ็คเกจในคำสั่ง Java
java com.acme.example.ListAppuals

แทน

java ListAppuals
  • คุณควร ประกาศชื่อคลาส แทนที่จะประกาศชื่อไฟล์หรือชื่อพาธ Java จะไม่ดึงข้อมูลคลาสหากคุณประกาศชื่อพาธ/ชื่อไฟล์สำหรับคลาสนั้น ไม่ถูกต้อง รายการรวมถึงต่อไปนี้:
java ListAppuals.class

java com/acme/example/ListAppuals.class
  • ปลอก ควรนำมาพิจารณา คำสั่ง Java คำนึงถึงขนาดตัวพิมพ์ และหากคุณทำผิดพลาดแม้แต่ตัวอักษรเดียว คุณจะไม่สามารถโหลดคลาสหลักได้ ตัวอย่าง ข้อผิดพลาดที่ไม่ถูกต้อง คือ:
java com.acme.example.listappuals
  • คุณ ไม่ควร ประกาศ ชื่อไฟล์ต้นทาง . ดังที่กล่าวไว้ก่อนหน้านี้ คุณจะต้องประกาศคลาสในรูปแบบชื่อเต็มที่ถูกต้องเท่านั้น ตัวอย่างข้อผิดพลาดคือ:
java ListAppuals.java
  • ข้อผิดพลาดนี้จะเกิดขึ้นหากคุณพิมพ์ผิด หรือ ลืมเขียนชื่อชั้นเรียนทั้งหมด .

หากคุณทำผิดพลาดในการประกาศชื่อคลาส อย่าลืมแก้ไขแล้วลองเปิดโปรแกรม

โซลูชัน 2:การตรวจสอบ classpath

หากคุณประกาศชื่อคลาสอย่างถูกต้องแต่ยังคงแสดงข้อผิดพลาด เป็นไปได้ว่าคำสั่ง java จะไม่พบชื่อคลาสที่ระบุที่พาธ classpath เป็นพาธที่รันไทม์ Java ค้นหาไฟล์ทรัพยากรและคลาส คุณสามารถตั้งค่า classpath ได้อย่างง่ายดายโดยใช้คำสั่งที่แตกต่างกันสองคำสั่งดังที่แสดงด้านล่าง:

C:> sdkTool -classpath classpath1;classpath2...

C:> set CLASSPATH=classpath1;classpath2...

หากต้องการทราบข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับเส้นทางของชั้นเรียน คุณควรตรวจสอบเอกสารต่อไปนี้

เอกสารคำสั่ง Java

การตั้งค่าคลาสพาธ

โซลูชัน 3:การตรวจสอบไดเรกทอรี

เมื่อคุณประกาศไดเร็กทอรีเป็น classpath ไดเร็กทอรีจะสอดคล้องกับรูทของเนมสเปซเสมอ ตัวอย่างเช่น ถ้า “/usr/local/acme/classes” อยู่บน classpath Java จะค้นหาคลาส “com.acme.example.Appuals” มันจะค้นหาคลาสที่มีชื่อพาธต่อไปนี้:

/usr/local/acme/classes/com/acme/example/Appuals.class

โดยพื้นฐานแล้ว หากคุณใส่ที่อยู่ต่อไปนี้ใน classpath Java จะไม่พบคลาส:

/usr/local/acme/classes/com/acme/example

คุณควรตรวจสอบ ไดเรกทอรีย่อย . ของคุณด้วย และดูว่าตรงกับ FQN หรือไม่ หากคลาส FQN ของคุณคือ “com.acme.example.Appuals” Java จะค้นหา “Appuals.class” ในไดเร็กทอรี “com/acme/example”

เพื่อยกตัวอย่าง สมมติสถานการณ์ต่อไปนี้:

  • คลาสที่คุณต้องการเรียกใช้คือ:com.acme.example.Appuals
  • เส้นทาง ไฟล์แบบเต็ม คือ:/usr/local/acme/classes/com/acme/example/Appuals.class
  • ไดเร็กทอรีการทำงานปัจจุบัน คือ:/usr/local/acme/classes/com/acme/example/

สถานการณ์ต่อไปนี้จะคงอยู่:

# wrong, FQN is needed

java Appuals

# wrong, there is no `com/acme/example` folder in the current working directory

java com.acme.example.Appuals

# wrong, similar to above scenario

java -classpath . com.acme.example.Appuals

# OK ; a relative classpath is set

java -classpath ../../.. com.acme.example.Appuals

# OK; an absolute classpath is set

java -classpath /usr/local/acme/classes com.acme.example.Appuals

หมายเหตุ: classpath ยังต้องรวม class อื่นๆ ทั้งหมด (ไม่ใช่ระบบ) ที่แอปพลิเคชันของคุณต้องการ

โซลูชันที่ 4:การตรวจสอบแพ็คเกจคลาส

หากวิธีแก้ปัญหาทั้งหมดข้างต้นเป็นจริงในกรณีของคุณ คุณต้องแน่ใจว่าซอร์สโค้ดของคุณอยู่ในโฟลเดอร์ที่ถูกต้อง นอกจากนี้ คุณได้ประกาศ แพ็คเกจ . อย่างถูกต้อง . หากคุณเรียกใช้โค้ดด้วย IDE ระบบอาจแจ้งให้คุณทราบเกี่ยวกับปัญหาดังกล่าว อย่างไรก็ตาม ในกรณีของเรา เนื่องจากเรากำลังเรียกใช้ในพรอมต์คำสั่ง ข้อผิดพลาดจะไม่ได้รับการสังเกต และคุณจะได้รับข้อผิดพลาดของชั้นเรียนภายใต้การสนทนา