reached end of file while parsing の原因と直し方
波括弧の対応が崩れたときに出ます。エラー行がファイル末尾を指すため、原因箇所の特定にコツが要ります。
エラーメッセージの読み方
Main.java:5: error: reached end of file while parsing
Main.java- ファイル名
5- 行番号 — javacが異常に気づいた位置。原因の行とは限りません
error- 種別 — コンパイルエラー。実行まで到達しません
reached end of file while parsing- 内容 — javacが期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 public class Main { 2 public static void main(String[] args) { 3 System.out.println("Hello"); 4 } 5 ^
Main.java:5: error: reached end of file while parsing
開いた波括弧の数だけ閉じる必要があります。クラスの閉じ括弧が足りないと、ファイル末尾まで読んでから報告されます。
直し方: (空) を } にします。
広告
広告スロット(未設定)
パターン2
1 public class Main ^ 2 public static void main(String[] args) { 3 System.out.println("Hi"); 4 } 5 }
Main.java:1: error: '{' expected
クラス宣言の直後には本体を開く波括弧が要ります。ここが欠けると以降すべてが宣言の一部と解釈されます。
直し方: (空) を { にします。
パターン3
1 public class Main { 2 public static void main(String[] args) { 3 for (int i = 0; i < 3; i++) ^ 4 System.out.println(i); 5 } 6 } 7 }
Main.java:7: error: class, interface, enum, or record expected
forの本体を波括弧で囲まないと、次の1文だけが本体になります。残った閉じ括弧が対応先を失い、ファイル末尾で構文エラーになります。
直し方: (空) を { にします。
パターン4
1 public class Main { 2 static void greet() { 3 System.out.println("Hi"); 4 ^ 5 public static void main(String[] args) { 6 greet(); 7 } 8 }
Main.java:4: error: illegal start of expression
greetメソッドの閉じ括弧が足りないと、次のpublicがメソッド本体の中の文として読み込まれ、構文が崩れます。
直し方: (空) を } にします。
パターン5
1 public class Main { 2 public static void main(String[] args) { 3 int n = 0; 4 while (n < 3) ^ 5 System.out.println(n); 6 n++; 7 } 8 } 9 }
Main.java:9: error: class, interface, enum, or record expected
whileの本体を波括弧で囲まないと、次の1文だけが本体になります。残った閉じ括弧が対応先を失い、ファイル末尾で構文エラーになります。
直し方: (空) を { にします。
よくある誤解
エラー行がファイル末尾を指しますが、原因はもっと上にあります。行番号を追うより、インデントを揃えて括弧の対応を目で追うほうが速いです。
まとめ
reached end of file while parsingは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。