Main method not found in class の原因と直し方
コンパイルは通るのに実行できない典型。JVMがmainを見つける条件を1つずつ確認します。
エラーメッセージの読み方
Error: Main method not found in class Main
Main method not found in class Main- JVM起動時のエラー — コンパイルは成功しています
このエラーが出る典型パターン
パターン1
1 public class Main { 2 public static void Main (String[] args) { ^ 3 System.out.println("Hello"); 4 } 5 }
Error: Main method not found in class Mainexited with code 1
JVMは起動時にmainという名前のメソッドを探します。コンパイルは通るため、実行して初めて失敗します。
直し方: Main を main にします。
広告
広告スロット(未設定)
パターン2
1 public class Main { 2 public void main(String[] args) { ^ 3 System.out.println("Hello"); 4 } 5 }
Error: Main method is not static in class Mainexited with code 1
mainはインスタンスを作る前に呼ばれるので、staticでなければなりません。
直し方: (空) を static にします。
パターン3
1 public class Main { 2 public static void main(String args) { ^ 3 System.out.println("Hello"); 4 } 5 }
Error: Main method not found in class Mainexited with code 1
引数はString配列でなければmainとして認識されません。コマンドライン引数を受け取るための決まった形です。
直し方: String を String[] にします。
パターン4
1 public class Main { 2 public static void main(String[] args, int x ) { ^ 3 System.out.println("Hello"); 4 } 5 }
Error: Main method not found in class Mainexited with code 1
エントリーポイントとして認識されるのはString[]単独の引数を持つmainだけです。余分な引数があると別のメソッドとして扱われ、起動時に見つかりません。
直し方: , int x を (空) にします。
パターン5
1 public class Main { 2 private static void main(String[] args) { ^ 3 System.out.println("Hello"); 4 } 5 }
Error: Main method not found in class Mainexited with code 1
エントリーポイントはpublicでなければなりません。privateだとコンパイルは通っても、クラス外のJVMからは呼び出せません。
直し方: private を public にします。
よくある誤解
「コンパイルが通った=正しい」ではありません。mainの綴りミスは実行時まで発覚しない代表例です。
まとめ
Main method not found in classは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。