Minecraft NoClassDefFoundError: แก้ปัญหาเกมค้างเมื่อคลาส Java หายไป
ข้อ ผิด พลาด NoClassDefFoundError ใน Minecraftหมายความว่า Java ไม่สามารถโหลดคลาสที่เกม ม็อด หรือตัวโหลดคาดหวังว่าจะใช้งานได้ ข้อผิดพลาดนี้ไม่ได้ระบุวิธีแก้ไขแบบเดียวที่ใช้ได้กับทุกกรณี ชื่อคลาสที่หายไปในบันทึกมักจะบอกคุณว่าควรตรวจสอบการพึ่งพาของม็อด เวอร์ชันของตัวโหลด ไฟล์เกม หรือรันไทม์ของ Java เริ่มต้นด้วยการอ่านชื่อนั้น จากนั้นทดสอบโปรไฟล์แบบดั้งเดิมที่สะอาดก่อนที่จะแก้ไขไฟล์
หากคุณค้นหาข้อผิดพลาด “Lang Java” ใน Minecraft java.langนั่นหมายความว่ามีชื่อแพ็กเกจของ Java อยู่ในข้อความแสดงข้อผิดพลาด ไม่ใช่โฟลเดอร์ไฟล์ภาษาของ Minecraft ให้ลองตรวจสอบตามขั้นตอนทั้งสี่ด้านล่างตามลำดับ และหลีกเลี่ยงการลบไฟล์บันทึกเกมหรือโฟลเดอร์ไลบรารีของ Minecraft ทั้งหมดเป็นขั้นตอนแรก
NoClassDefFoundError ใน Minecraft Java หมายความว่าอย่างไร
Oracle นิยามNoClassDefFoundErrorข้อผิดพลาด NoClassDefFoundError ว่าเป็นข้อผิดพลาดในการเชื่อมโยงที่เกิดขึ้นเมื่อ JVM หรือตัวโหลดคลาสไม่พบคำนิยามของคลาสที่โค้ดต้องการในขณะรันไทม์ ใน Minecraft คลาสนั้นอาจเป็นของ Minecraft เอง, Fabric หรือ Forge, ม็อด หรือไลบรารีที่จำเป็นสำหรับม็อดนั้นๆ ข้อผิดพลาดนี้อาจเกิดขึ้นหลังจากการอัปเดต เมื่อม็อดถูกสร้างขึ้นสำหรับ Minecraft หรือเวอร์ชันตัวโหลดที่แตกต่างกัน เมื่อขาดส่วนประกอบที่จำเป็น หรือเมื่อการติดตั้งหรือรันไทม์เสียหาย ชื่อเพียงอย่างเดียวไม่ได้พิสูจน์ว่าสาเหตุใดถูกต้องเอกสารอ้างอิง API ของ Oracle สำหรับ Java เกี่ยวกับ NoClassDefFoundErrorอธิบายความหมายในระดับ JVM ไว้
อ่านชื่อคลาสหลังเครื่องหมายโคลอน ตัวอย่างเช่นnet/fabricmc/...ชี้ไปยังโค้ดที่เกี่ยวข้องกับ Fabric ในขณะที่com/vendor/mod/...มักชี้ไปยังม็อดหรือไลบรารีที่รวมมาด้วย ชื่อที่อยู่ใต้java/lang/เป็นของรันไทม์ Java สิ่งเหล่านี้เป็นเพียงเบาะแส ไม่ใช่ข้อสรุป ใช้ข้อมูลการติดตามการทำงานโดยรอบเพื่อยืนยัน
| การขาดเรียนเริ่มต้นด้วย | สิ่งที่ควรตรวจสอบก่อน |
net/minecraft/ | ไม่ว่าม็อดหรือตัวโหลดจะตรงกับเวอร์ชัน Minecraft ที่แน่นอนหรือไม่ จากนั้นตรวจสอบไฟล์เกมที่ถูกแก้ไขหรือไม่สมบูรณ์ |
net/fabricmc/หรือnet/minecraftforge/แพ็คเกจตัวโหลดอื่น ๆ | การติดตั้งตัวโหลด เวอร์ชันของตัวโหลด และ API หรือตัวเชื่อมต่อของตัวโหลดที่จำเป็นสำหรับม็อดที่ได้รับผลกระทบ |
เนมสเปซของม็อดหรือไลบรารี เช่นcom/example/ | ระบุชื่อม็อด ส่วนประกอบที่จำเป็น และตรวจสอบว่าทั้งสองอย่างนั้นเป็นเวอร์ชันที่ถูกต้องสำหรับเกมและตัวโหลดนี้หรือไม่ |
java/lang/หรือแพ็กเกจแพลตฟอร์ม Java อื่นๆ | รันไทม์ Java ที่ตัวเรียกใช้งานเลือกใช้ และว่าข้อผิดพลาดนั้นเกิดขึ้นในโปรไฟล์เริ่มต้นที่ไม่มีการปรับแต่งใดๆ ด้วยหรือไม่ |
java.lang.IllegalArgumentExceptionไฟล์นี้เป็นคลาสมาตรฐานของ Java ไม่ใช่ไฟล์ภาษาของ Minecraft หากบันทึกแจ้งว่าคลาสนี้หายไป ให้พิจารณาว่าการตั้งค่ารันไทม์หรือการโหลดคลาสที่เลือกนั้นอาจมีปัญหา และตรวจสอบอีกครั้งด้วยการเปิดเกมเวอร์ชันปกติโดยไม่มีการปรับแต่งใดๆ อย่าดาวน์โหลดคลาสทดแทนจากเว็บไซต์ของบุคคลที่สาม
สี่ขั้นตอนในการแก้ไขข้อผิดพลาด NoClassDefFoundError ใน Minecraft
1. ค้นหาคลาสที่หายไปในบันทึกให้ถูกต้อง
เปิดรายงานข้อผิดพลาดล่าสุดหรือรายงานlogs/latest.logข้อผิดพลาดสำหรับการติดตั้งที่ได้รับผลกระทบ ค้นหาNoClassDefFoundErrorคัดลอกชื่อคลาสแบบเต็มที่ตามมา และอ่านหลายบรรทัดทั้งด้านบนและด้านล่างของข้อความที่ตรงกัน นอกจากนี้ ให้จดบันทึกCaused by:รายการแรกและม็อดหรือตัวโหลดตัวแรกที่ระบุในร่องรอยการทำงาน บรรทัดสุดท้ายอาจเป็นผลมาจากความล้มเหลวก่อนหน้านี้ ดังนั้นอย่าหยุดที่ข้อความสุดท้าย
ตัวอย่างมุมมองบันทึก: บันทึกชื่อคลาสที่หายไปและสาเหตุใกล้เคียงก่อนทำการเปลี่ยนแปลงการติดตั้ง
สำหรับ Minecraft Launcher มาตรฐาน ไฟล์บันทึก (log) จะอยู่ในโฟลเดอร์ของไดเร็กทอรีเกมlogsและรายงานข้อผิดพลาด (crash report) จะอยู่ในโฟลเดอร์crash-reports. ส่วนไดเร็กทอรีเกมที่กำหนดเองหรือ Launcher จากภายนอก จะเก็บไฟล์ไว้ในโฟลเดอร์เฉพาะของ Launcher นั้นๆคู่มือการค้นหาไฟล์บันทึก ของ Fabric แสดงตำแหน่งทั่วไปสำหรับ Launcher หลายตัว หากคุณแชร์ไฟล์บันทึกเพื่อขอความช่วยเหลือ โปรดลบรายละเอียดบัญชี โทเค็นการเข้าถึง และที่อยู่เซิร์ฟเวอร์ส่วนตัวออกก่อน
2. ทดสอบ Minecraft เวอร์ชันเดียวกันโดยไม่ใช้ม็อด
เปิดเกม Minecraft เวอร์ชันที่ถูกต้องในระบบที่ติดตั้งแบบไม่มีม็อด หากตัวเปิดเกมของคุณรองรับโฟลเดอร์เกมแยกต่างหาก ให้ใช้โฟลเดอร์ชั่วคราวเพื่อไม่ให้การทดสอบนำโฟลเดอร์ม็อดหรือไฟล์บันทึกโลกมาใช้ซ้ำ เริ่มเกมไปที่หน้าจอไตเติ้ล อย่าเปิดโลกที่สร้างด้วยม็อดแพ็คในระหว่างการทดสอบนี้
รายการตัวเรียกใช้งานตัวอย่าง: ลองใช้โปรไฟล์เวอร์ชันดั้งเดิมแยกต่างหากเพื่อดูว่าข้อผิดพลาดเกิดขึ้นกับเวอร์ชันของเกมหรือเกิดขึ้นเฉพาะกับเวอร์ชันที่ดัดแปลงแล้ว
หากลองเล่นเวอร์ชันปกติแล้วเกมล่ม โอกาสที่ Java runtime และไฟล์เกมพื้นฐานจะเป็นสาเหตุนั้นมีน้อย ให้เน้นไปที่เวอร์ชันที่ติดตั้งม็อด ตัวโหลด และส่วนประกอบที่เกี่ยวข้อง หากเวอร์ชันปกติก็ยังล่มอยู่ ให้ลองทดสอบเวอร์ชันเดียวกันที่ติดตั้งใหม่ทั้งหมด และตรวจสอบ runtime ที่เลือกก่อนที่จะตรวจสอบม็อดแต่ละตัว การเปรียบเทียบนี้จะช่วยจำกัดขอบเขตการค้นหาโดยไม่ลบข้อมูล
3. ตรวจสอบให้แน่ใจว่าม็อดทุกตัวตรงกับเกมและตัวโหลด
ตรวจสอบเวอร์ชัน Minecraft, ตระกูลตัวโหลด และเวอร์ชันตัวโหลดที่แสดงโดยโปรไฟล์ที่ได้รับผลกระทบ จากนั้นตรวจสอบหน้าเผยแพร่ของแต่ละม็อดที่น่าสงสัยว่ามีข้อมูลทั้งสามอย่างครบถ้วนหรือไม่ เวอร์ชันที่สร้างด้วย Fabric, Forge และ NeoForge ไม่สามารถใช้แทนกันได้ เว้นแต่ผู้สร้างม็อดจะระบุความเข้ากันได้ไว้อย่างชัดเจน นอกจากนี้ ให้ติดตั้งส่วนประกอบที่จำเป็นตามที่ผู้สร้างม็อดระบุไว้ด้วย เพราะม็อดอาจมีอยู่ แต่คลาสที่ม็อดนั้นพึ่งพาอาจไม่มีอยู่
ตัวอย่างโฟลเดอร์ม็อด: ย้ายม็อดที่เพิ่งเพิ่มเข้าไปออกจากเกมชั่วคราว แล้วเริ่มเกมใหม่อีกครั้งเพื่อทดสอบว่าข้อผิดพลาดหายไปหรือไม่
เริ่มจากม็อดที่เพิ่มหรืออัปเดตทันทีก่อนที่เกมจะล่ม ย้ายม็อดเหล่านั้นไปยังโฟลเดอร์ชั่วคราวภายนอกอินสแตนซ์แทนที่จะลบทิ้ง หากเกมเริ่มทำงานได้ ให้เพิ่มม็อดที่ลบออกไปทีละน้อยจนกว่าจะเกิดข้อผิดพลาด ตรวจสอบชุดม็อดสุดท้ายและรายการการพึ่งพาที่ระบุไว้ สำหรับแพ็กม็อดขนาดใหญ่ ให้ใช้ฟังก์ชันซ่อมแซมหรืออัปเดตของแพ็กนั้นเอง และหลีกเลี่ยงการผสมไฟล์จากแพ็กที่ไม่เกี่ยวข้องกัน ความไม่เข้ากันที่ระบุไว้ในเอกสารอาจทำให้เกิดข้อผิดพลาดเกี่ยวกับคลาสที่หายไปแม้ว่าไฟล์ JAR ทุกไฟล์จะอ่านได้ ดังนั้นการแทนที่ไฟล์ที่เสียหายจึงไม่ใช่คำตอบเสมอไปคำถามที่พบบ่อยของผู้ใช้ Fabric มีตัวอย่างของความไม่เข้ากันของตัวโหลดและม็อด
4. ตรวจสอบ Java จากนั้นซ่อมแซมเฉพาะการติดตั้งที่ได้รับผลกระทบ
เวอร์ชัน Java ที่ต้องการนั้นขึ้นอยู่กับเวอร์ชันและตัวเรียกใช้งาน Minecraft ตัวเรียกใช้งาน Minecraft อย่างเป็นทางการจะมี Java runtime ของตัวเองสำหรับโปรไฟล์เกมทั่วไป ดังนั้นการติดตั้ง JDK ทั่วทั้งระบบจึงไม่ใช่วิธีแก้ปัญหาโดยอัตโนมัติ หากคุณใช้ตัวเรียกใช้งานอื่นหรือเรียกใช้เซิร์ฟเวอร์ด้วยตนเอง ให้ตรวจสอบไฟล์ปฏิบัติการ Java ที่เลือกสำหรับอินสแตนซ์นั้นและเปรียบเทียบเวอร์ชันที่ต้องการกับเอกสารของเกมและตัวเรียกใช้งาน ตัวอย่างเช่น บันทึกการเผยแพร่เวอร์ชัน 1.20.5 ของ Mojang ระบุว่าเกมต้องการ Java 21 ข้อกำหนดนั้นไม่ควรนำไปใช้กับ Minecraft ทุกเวอร์ชัน โปรดดูบันทึกการเผยแพร่เวอร์ชัน 1.20.5 อย่างเป็นทางการและคำแนะนำการติดตั้ง Javaของ Fabric
ตัวอย่างหน้าต่างสำรองข้อมูล: คัดลอกsavesโฟลเดอร์ก่อนทำการติดตั้งใหม่หรือแก้ไขไฟล์เกม
หากบันทึกข้อผิดพลาดระบุว่าคลาส Minecraft เวอร์ชันดั้งเดิมมีปัญหา และโปรไฟล์เวอร์ชันดั้งเดิมใหม่ยังคงใช้งานไม่ได้ ให้สำรองข้อมูลsavesภาพหน้าจอ และการตั้งค่าใดๆ ที่คุณต้องการเก็บไว้ จากนั้นสร้างเวอร์ชันหรือโปรไฟล์ที่ได้รับผลกระทบขึ้นมาใหม่โดยใช้กระบวนการติดตั้งหรือซ่อมแซมที่รองรับโดยตัวเรียกใช้งาน อย่าลบ.minecraft/librariesไดเร็กทอรีทั้งหมด เวอร์ชันทั้งหมด หรือแคชที่ใช้ร่วมกันของตัวเรียกใช้งานโดยไม่มีหลักฐาน การล้างข้อมูลในวงกว้างอาจทำให้เกิดการดาวน์โหลดเพิ่มเติมและทำให้ระบุสาเหตุที่แท้จริงได้ยากขึ้น ห้ามแทนที่ไฟล์ JAR ของเกมด้วยไฟล์จากแหล่งมิเรอร์ที่ไม่เป็นทางการเด็ดขาด
ข้อผิดพลาดทั่วไปที่ไม่ได้แก้ไขต้นเหตุของปัญหา
- อย่าเพิ่มแฟล็ก JVM ที่ไม่จำเป็นแฟล็กเหล่านั้นจะ
-Dfml.ignorePatchDiscrepancies=trueไม่สามารถกู้คืนคลาสที่หายไปได้ และอาจซ่อนข้อมูลการวินิจฉัยที่เป็นประโยชน์ได้
- อย่าคิดว่า Java ล้าสมัยเสมอไปความไม่เข้ากันของรันไทม์อาจเกิดขึ้นได้ แต่คลาสที่หายไปอาจมาจากส่วนประกอบเสริมหรือตัวโหลดที่ไม่เข้ากัน ข้อความแสดงข้อผิดพลาดและการทดสอบแบบพื้นฐานจะมีประโยชน์มากกว่าการติดตั้ง Java เวอร์ชันล่าสุดโดยไม่ตรวจสอบอะไรเลย
- อย่าลบข้อมูลโลกเพื่อทดสอบการเกิดข้อผิดพลาดขณะเริ่มต้นเกมโดยปกติแล้วไม่จำเป็นต้องใช้ข้อมูลโลกเพื่อจำลองข้อผิดพลาดที่เกิดขึ้นระหว่างการเริ่มต้นเกม โปรดเก็บไฟล์บันทึกเกมต้นฉบับของคุณไว้โดยไม่แตะต้องขณะทำการทดสอบ
หากอุบัติเหตุยังคงดำเนินต่อไป
เมื่อขอความช่วยเหลือจากผู้สร้างม็อดหรือชุมชนสนับสนุน โปรดระบุเวอร์ชัน Minecraft, โหลดเดอร์และเวอร์ชัน, ประเภทตัวเรียกใช้งาน, รันไทม์ Java ที่เลือกโดยโปรไฟล์นั้น, ชื่อคลาสที่หายไปแบบเต็ม และบันทึกหรือรายงานข้อผิดพลาดที่เกี่ยวข้อง ระบุด้วยว่ามีการเปิดใช้งานโปรไฟล์แบบดั้งเดิมแยกต่างหากหรือไม่ รายละเอียดเหล่านี้จะช่วยให้ผู้ช่วยเหลือแยกแยะความแตกต่างระหว่างการขาดส่วนประกอบของม็อดกับปัญหาของโหลดเดอร์ รันไทม์ หรือไฟล์เกม หากข้อผิดพลาดเริ่มขึ้นหลังจากการอัปเดต โปรดระบุให้แน่ชัดว่าม็อด โหลดเดอร์ หรือเวอร์ชันเกมใดเปลี่ยนแปลง ด้วยข้อมูลดังกล่าว การตรวจสอบความเข้ากันได้ ของคลาส Java ใน Minecraftจะตรงเป้าหมายมากขึ้น แทนที่จะเป็นการเดาและลบไปเรื่อยๆ