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

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

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

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

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

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

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

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

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

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

 java [... ] [... ] 

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

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

 java -Xmx100m com.acme.example.ListAppuals เควินลูกศรบาร์ต 

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

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

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

โซลูชันที่ 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 runtime ค้นหาทรัพยากรและไฟล์คลาส คุณสามารถตั้งค่า classpath ได้อย่างง่ายดายโดยใช้คำสั่งสองคำสั่งต่างกัน

 C:> sdkTool -classpath classpath1; classpath2 ... C:> ตั้งค่า CLASSPATH = classpath1; classpath2 ... 

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

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

การตั้งค่า classpath

โซลูชันที่ 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 / สุดยอด / เรียน / co.th / สุดยอด / ตัวอย่าง 

คุณควรตรวจสอบ ไดเรกทอรีย่อย และดูว่าตรงกับ 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 /

จากนั้นสถานการณ์ดังต่อไปนี้จะถือ:

 # ผิดต้องใช้ FQN จาวาแอปพลิเคชัน # ผิดไม่มีโฟลเดอร์ `com / acme / example` ในไดเรกทอรีการทำงานปัจจุบัน java com.acme.example.Appuals # ผิดคล้ายกับสถานการณ์ข้างต้น java -classpath com.acme.example.Appuals # OK; classpath แบบสัมพัทธ์ถูกตั้งค่า java -classpath ../../ .. com.acme.example.Appuals # OK; คลาสพา ธ สัมบูรณ์ถูกตั้งค่า java -classpath / usr / local / acme / classes com.acme.example.Appuals 

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

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

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

บทความที่น่าสนใจ