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

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

หากคุณได้รับข้อผิดพลาดไม่พบคลาสหลักในโครงการ Java ของคุณโดยไม่มีเหตุผลชัดเจน ไม่ต้องกังวล คุณไม่ได้อยู่คนเดียว





เนื่องจากหนึ่งในข้อผิดพลาดที่คาดไม่ถึงและเกิดขึ้นเองตามธรรมชาติ เนื่องจาก JVM (Java Virtual Machine) มีแนวโน้มที่จะยึดติดกับ classpath เริ่มต้น ปัญหา 'ไม่พบคลาสหลัก' จึงเป็นสิ่งที่หลอกหลอนทั้งมือสมัครเล่นและมืออาชีพ





แต่ประเด็นนี้จริง ๆ แล้วน่ากลัวน้อยกว่าที่ควรจะเป็น อ่านต่อไปเพื่อค้นหาวิธีกำจัดข้อผิดพลาดนี้ทุกครั้ง





เหตุใดจึงไม่พบคลาสหลัก

ก่อนที่เราจะพยายามทำความเข้าใจว่า JVM ไม่พบคลาสหลักได้อย่างไรและทำไม เราต้องเข้าใจแนวคิดของ Classpath ในชวา

Classpath คืออะไร?

classpath คือพาธไฟล์ที่สภาวะแวดล้อมรันไทม์ Java ค้นหาคลาสและไฟล์รีซอร์สอื่นๆ สามารถตั้งค่าได้โดยใช้ปุ่ม -คลาสพาธ ตัวเลือกเมื่อรันโปรแกรมหรือโดยการตั้งค่าระบบ คลาสพาธ ตัวแปรสภาพแวดล้อม



ตามชื่อที่แนะนำ มันเป็นเพียงเส้นทางของไฟล์ที่ .ระดับ ไฟล์สามารถพบได้ในแพ็คเกจ JDK หรือไดเร็กทอรี

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





ณ จุดนี้ หากคุณต้องการรีเฟรชหน่วยความจำของคลาส Java โปรดดูคำแนะนำสำหรับ การสร้างคลาสใน Java .

หาเล่มใหม่มาอ่าน

การใช้แพ็คเกจ

มาสร้างคลาสที่ชื่อว่า ทดสอบ . ใส่ในแพ็คเกจที่เรียกว่า แพ็คเกจทดสอบ . แพ็คเกจถูกใช้ใน Java เพื่อจัดกลุ่มคลาสที่คล้ายกันเข้าด้วยกัน หรือจัดเตรียมเนมสเปซเฉพาะสำหรับคลาส





ในตัวอย่างง่ายๆ นี้ การใช้แพ็คเกจจะช่วยให้คุณเห็นภาพว่า classpath ของ Java ทำงานอย่างไร ในแอปพลิเคชันตัวจัดการไฟล์ของคุณ แพ็คเกจจะแสดงเป็นโฟลเดอร์อิสระ

package testPackage;
public class Test {
public static void main(String args[]) {
System.out.println('File successfully found!');
}
}

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

รวบรวม Test.java โดยรันคำสั่งต่อไปนี้:

package testPackage;
javac testPackage/Test.java

สิ่งนี้จะบันทึกไฟล์ไบนารีที่คอมไพล์แล้ว (ไฟล์ .class) ใน testPackage

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

java testPackage.Test

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

ในการใช้งานขั้นสูง เราขอแนะนำให้คุณสร้างโฟลเดอร์ย่อยแยกกันสำหรับคลาสและไฟล์ต้นทางเพื่อจัดการไฟล์ภายในแพ็คเกจได้ดียิ่งขึ้น

ระบุ Classpath ด้วยตนเอง

วิธีที่แนะนำในการจัดการไฟล์ java คือการสร้างไดเร็กทอรีแยกสำหรับไฟล์ต้นฉบับและคลาส หากคุณกำลังทำงานในโครงการ เป็นไปได้ว่าคุณกำลังทำสิ่งนี้อยู่แล้ว

ตามอัตภาพ ไดเร็กทอรีที่มีไฟล์ต้นฉบับจะมีป้ายกำกับว่า src และไฟล์ที่มีไฟล์ .class มีป้ายกำกับว่า ชั้นเรียน นี่เป็นวิธีที่จะทำให้แน่ใจได้ว่าโอกาสที่ JVM จะไม่พบคลาสหลักจะลดลงอย่างมาก เนื่องมาจากไดเร็กทอรีที่มีโครงสร้างอย่างเหมาะสม

ถ้าเราใช้วิธีนี้ โครงสร้างไดเร็กทอรีจะมีลักษณะเช่นนี้ก่อนคอมไพล์:

เชื่อมต่อ iphone hotspot ไม่ได้
|---myFolder
| |---src
| |---testPackage
| |---Test.java
|
| |---classes

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

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

javac -d classes src/testPackage/Test.java

NS .ระดับ executable ควรถูกบันทึกไว้ใน myFolder/classes/testPackage . ดังนั้น โครงสร้างไดเร็กทอรีไฟล์จึงมีลักษณะดังนี้:|_+_|

เพื่อเรียกใช้ .ระดับ ไฟล์ รันคำสั่ง Java ด้วยชื่อคลาสแบบเต็ม และระบุ classpath โลคัล ทุกเส้นทางมีการประกาศสัมพันธ์กับไดเร็กทอรีการทำงาน ซึ่งในกรณีนี้คือ myFolder

|---myFolder
| |---src
| |---testPackage
| |---Test.java
|
| |---classes
| |---testPackage
| |---Test.class

การรันคำสั่งนี้ควรให้ผลลัพธ์ที่ต้องการ แต่เหตุใดการปรับโครงสร้างองค์กรใหม่จึงจำเป็นต่อการแก้ไขข้อผิดพลาดง่ายๆ

ความสำคัญของการจัดระเบียบไฟล์ใน Java

สาเหตุที่ทำให้เกิด 'ไม่พบหรือโหลดคลาสหลัก' เป็นเพราะ JVM ไม่สามารถค้นหาตำแหน่งของคุณ .ระดับ กำลังจัดเก็บไฟล์

วิธีที่ง่ายที่สุดในการแก้ไขข้อผิดพลาดนี้คือการควบคุมตำแหน่งที่เก็บไฟล์ .class และบอกให้ JVM ดูที่นั่นอย่างชัดเจน สิ่งนี้เกิดขึ้นได้โดยการจัดระเบียบไฟล์ต้นทางและไฟล์เรียกทำงานแยกกัน และควบคุมทุกอย่างจากไดเร็กทอรีที่ทำงาน

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

หากต้องการอ่านเพิ่มเติมเกี่ยวกับวิธีการทำงานของ classpath ใน Java และสิ่งต่างๆ มากมายที่คุณสามารถควบคุมได้เมื่อต้องการเรียกใช้โค้ดของคุณ คุณสามารถดูได้ที่ Oracle's ข้อมูลอ้างอิงโดยละเอียดและใช้งานง่าย .

แบ่งปัน แบ่งปัน ทวีต อีเมล 10 โครงการสำหรับผู้เริ่มต้นที่ดีที่สุดสำหรับโปรแกรมเมอร์ใหม่

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

รหัสข้อผิดพลาดของ netflix m7701-1003
อ่านต่อไป หัวข้อที่เกี่ยวข้อง
  • การเขียนโปรแกรม
  • Java
เกี่ยวกับผู้เขียน ยัช เชลลานี(10 บทความที่ตีพิมพ์)

Yash เป็นนักศึกษาวิทยาการคอมพิวเตอร์ผู้ใฝ่ฝันที่รักการสร้างสิ่งต่าง ๆ และเขียนเกี่ยวกับเทคโนโลยีทุกอย่าง ในเวลาว่าง เขาชอบเล่นสควอช อ่านสำเนา Murakami ล่าสุด และล่ามังกรใน Skyrim

เพิ่มเติมจาก Yash Chellani

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก