Cannot find symbol เกิดตอน Compile-time เมื่อ Compiler ไม่รู้จัก Symbol (Class, Method, Variable) ที่เราอ้างถึง สาเหตุหลัก 3 ข้อ
สาเหตุหลัก 3 ข้อ
- Missing Import - ไม่ได้ Import Class/Package ที่ใช้
- Typo / Wrong Name - สะกดชื่อ Class/Method/Variable ผิด (Case-Sensitive)
- Classpath Issue - Class ไม่อยู่ใน Classpath (JAR ไม่ได้ Add, โฟลเดอร์ผิด)
ตัวอย่างที่ 1: Missing Import
public class ReadingData {
public static void main(String args[]) {
System.out.println("Enter name: ");
Scanner sc = new Scanner(System.in); // Error: Scanner ไม่ได้ Import
String name = sc.next();
System.out.println("Hello " + name);
}
}
Error
ReadingData.java:5: error: cannot find symbol
Scanner sc = new Scanner(System.in);
^
symbol: class Scanner
location: class ReadingData
แก้ไข
import java.util.Scanner; // เพิ่ม Import
public class ReadingData { ... }
ตัวอย่างที่ 2: Typo / Wrong Case
public class TypoExample {
public static void main(String[] args) {
System.out.println("Hello"); // ตัวพิมพ์ใหญ่ S
system.out.println("World"); // Error: system (เล็ก) ไม่มีใน java.lang
}
}
ตัวอย่างที่ 3: Classpath Problem
มีไฟล์ com/example/Util.class แต่รันจากโฟลเดอร์อื่นโดยไม่ Set Classpath
javac -cp . MyApp.java java -cp . MyApp // ถ้า Util.class ไม่อยู่ใน . หรือ JAR -> Cannot find symbol
วิธีแก้ไขทั่วไป
- IDE (IntelliJ/Eclipse/VS Code) - กด Alt+Enter / Ctrl+Space -> Auto Import
- Command Line - ตรวจสอบ
importStatement, Spelling,-cp/-classpath - Maven/Gradle - ตรวจสอบ Dependency ใน
pom.xml/build.gradleว่ามี Library ที่จำเป็นครบ
Error แบบใกล้เคียง
| Error | สาเหตุ |
|---|---|
| Cannot find symbol: method xxx() | เรียก Method ที่ไม่มีอยู่ (Typo, Wrong Params, หรือ Version ไม่ตรง) |
| Cannot find symbol: variable xxx | ใช้ Variable ที่ไม่ได้ประกาศ หรือ Out of Scope |
| Package xxx does not exist | Import Package ผิด หรือ Library หาย |
สรุป
Cannot find symbol = Compiler ไม่เห็น Definition ของ Symbol นั้น ตรวจสอบ Import, Spelling/Case, Classpath/Dependencies ให้ครบถ้วน