ข้อผิดพลาด ' ไม่พบหรือโหลดคลาสหลัก ’เกิดขึ้นเมื่อใช้คำสั่ง 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 นาที