ข้อผิดพลาดขณะรันโปรแกรมที่พบบ่อย
-
Exception in thread "main" java.lang.NoClassDefFoundError:
<ชื่อคลาสที่ต้องการรัน>
- ข้อความนี้เกิดขึ้นเมื่อ java ต้องการโหลดคลาสเข้าสู่หน่วยความจำแต่ไม่พบคลาสที่ต้องการ (No class definition found)
เหตุที่หาคลาสที่ต้องการไม่เจออาจเนื่องมาจากสาเหตุต่าง ๆ ดังต่อไปนี้
- ตอนสั่งรันโปรแกรมระบุชื่อคลาสไม่ถูก อาจเขียนชื่อคลาสที่ต้องการรันผิด หรือเขียนชื่อคลาสใน source code ผิดไปจากที่ตั้งใจ
- ชื่อคลาสที่สั่งรันอาจจะถูกต้องแล้วแต่ java interpreter หาแฟ้มคลาสที่ต้องการไม่พบ เนื่องจากไม่ได้ตั้งตั้งค่า directory ที่จาวาจะไปค้นหาคลาส (CLASSPATH) หรือตั้งค่าไม่ถูกต้อง กรณีที่คอมไพล์และรันผ่านทางโปรแกรม JEditPlus ถ้าไม่ได้ตั้งค่า CLASSPATH ให้กับระบบปฏิบัติการ ต้องตั้งค่า CLASSPATH ให้กับโปรแกรม JEditPlus ก่อนที่จะรันโปรแกรม ให้ดูวิธีใช้โปรแกรม JEditPlus ประกอบ
- ชื่อ directory หรือ path ที่นำไปสู่โฟลเดอร์ที่บรรจุแฟ้มคลาสที่ต้องการรันไม่ถูกต้องตามกฏการตั้งชื่อของจาวา จาวาจะถือว่าชื่อ directory ที่บรรจุคลาสเป็นชื่อ package ซึ่งชื่อ package ต้องเป็นไปตามกฏการตั้งชื่อตัวระบุ (identifier) เช่นเดียวกันชื่อคลาส เพราะฉะนั้น ชื่อ directory และ subdirectory ที่เกี่ยวข้องควรตั้งให้ถูกต้องตามกฏการตั้งชื่อ จะมีวรรค (space) หรืออักษรพิเศษอื่นใดนอกเหนือจาก underscore (_) ไม่ได้ ปัญหาที่พบบ่อยเกิดจาการเขียนโปรแกรมไว้ในโฟลเดอร์ My Documents ซึ่งชื่อโฟลเดอร์มี space ปนอยู่ด้วยจึงขัดกับกฏการตั้งขื่อ ถ้าบรรจุ source code หรือแฟ้มคลาสไว้ที่ desk top หรือโฟลเดอร์ที่อยู่ใต้ Desk Top หรือในโฟลเดอร์ Program Files ก็จะมีปัญหาเดียวกันเพราะชื่อโฟลเดอร์มี space ผสมอยู่ด้วยนั่นเอง กรณีที่ directory มี space ปะปนอยู่ด้วยนั้น อาจทำให้จาวาแจ้งชื่อคลาสในข้อความแสดงข้อผิดพลาดไม่ตรงกับชื่อคลาสที่เราต้องการรันก็เป็นได้