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

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

ไม่พบหรือโหลดคลาสหลักในบรรทัดคำสั่ง Java

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

อะไรเป็นสาเหตุของข้อผิดพลาด 'ไม่พบหรือโหลดคลาสหลัก' ใน Java

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

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

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

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

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

 java [... ] [... ]

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

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

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

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

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

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

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

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

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

แทน

รายการ javaAppuals
  • คุณควรประกาศชื่อคลาสแทนการประกาศชื่อไฟล์หรือชื่อพา ธ 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:> ตั้งค่า CLASSPATH = classpath1; classpath2 ...

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

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

การตั้งค่า classpath

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

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

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

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

/ usr / local / acme / class / 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 / สุดยอด / เรียน / co.th / สุดยอด / ตัวอย่าง /

จากนั้นสถานการณ์ต่อไปนี้จะเกิดขึ้น:

# 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

Note: The classpath needs to also include all the other classes (non-system) which your applications needs.

Solution 4: Checking class package

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