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



ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา

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



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

ไม่พบหรือโหลด main class- Java command line



ดังที่ได้กล่าวไว้ก่อนหน้านี้ข้อผิดพลาดนี้ส่วนใหญ่ไม่เกี่ยวข้องกับระบบและผู้ใช้ทำผิดพลาดในหลายสถานการณ์ดังที่แสดงด้านล่าง ก่อนที่จะก้าวต่อไปเราถือว่าคุณมีความรู้พื้นฐานเกี่ยวกับภาษาโปรแกรม 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 (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 / คลาส” อยู่บน 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
  • ไดเร็กทอรีการทำงานปัจจุบัน is: / usr / local / acme / class / com / acme / example /

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

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

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

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

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

อ่าน 4 นาที