'javac' is not recognized as an internal or external command, operable program or batch file
このエラーが発生した場合、Windowsでコンパイラ(javac
)を見つけることができません。
Windowsにjavac
の検索場所を認識させる方法は次のとおりです。 JDKをC:\jdk6
にインストールしている場合、 プロンプトで、次のコマンドを入力して[Enter]キーを押します。
C:\jdk6\bin\javac HelloWorldApp.java
この方法を選択した場合、プログラムのコンパイルまたは実行のたびに、javac
コマンドおよびjava
コマンドの前にC:\jdk6\bin\
を付加する必要があります。 この入力を省略する方法については、JDK 6のインストール手順のセクションを確認してください。
Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested
このエラーが発生した場合、プログラムのコンパイル時に.java
拡張子を含めることを忘れています。 コマンドはjavac HelloWorldApp.java
であり、javac HelloWorldApp
ではないことを覚えておいてください。
UNIXシステムでの一般的なエラー・メッセージ
javac: Command not found
このエラーが発生した場合、UNIXでコンパイラ(javac
)を見つけることができません。
UNIXにjavac
の検索場所を認識させる方法は次のとおりです。 JDKを/usr/local/jdk6
にインストールしている場合、 プロンプトで、次のコマンドを入力して[Return]キーを押します。
/usr/local/jdk6/javac HelloWorldApp.java
注: この方法を選択した場合、プログラムのコンパイルまたは実行のたびに、javac
コマンドおよびjava
コマンドの前に/usr/local/jdk6/
を付加する必要があります。 この入力を省略するには、この情報をPATH変数に追加します。 これを行う手順は、現在実行しているシェルによって異なります。
Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested
このエラーが発生した場合、プログラムのコンパイル時に.java
拡張子を含めることを忘れています。 コマンドはjavac HelloWorldApp.java
であり、javac HelloWorldApp
ではないことを覚えておいてください。
構文エラー(すべてのプラットフォーム)
プログラムの一部の入力を誤ると、コンパイラで構文エラーが発生することがあります。 メッセージには通常、エラーの種類、エラーが検出された行番号、その行のコード、そのコード内部のエラーの発生位置が表示されます。 文の最後のセミコロン(;
)が足りないために発生するエラーは次のとおりです。
testing.java:14: `;' expected. System.out.println("Input has " + count + " chars.") ^ 1 error
エラーが複数の行にわたって次々に発生している場合、コンパイラでプログラマーの意図を推測できず、わかりづらいエラー・メッセージや複数のエラー・メッセージが出力されることがあります。 たとえば、次のコードでは、太字の行でセミコロン(;
)が足りません。
while (System.in.read() != -1) count++ System.out.println("Input has " + count + " chars.");
このコードを処理すると、コンパイラで次の2つのエラー・メッセージが発生します。
testing.java:13: Invalid type expression. count++ ^ testing.java:14: Invalid declaration. System.out.println("Input has " + count + " chars."); ^ 2 errors
count++
を処理した後、コンパイラの状態はcount++
が式の途中にあることを表すので、コンパイラは2つのエラー・メッセージを発行します。 セミコロンがないと、コンパイラで文の終了を把握する手段はありません。
何らかのコンパイラ・エラーが発生した場合、プログラムのコンパイルは失敗し、.class
ファイルは作成されません。 プログラムをよく確認し、見つけたエラーを修正して、再度コンパイルしてください。
セマンティック・エラー
コンパイラでは、プログラムの構文の正確性の確認に加えて、他の基本的な正確性もチェックされます。 たとえば、初期化されていない変数を使用している場合、そのたびに警告が表示されます。
testing.java:13: Variable count may not have been initialized. count++ ^ testing.java:14: Variable count may not have been initialized. System.out.println("Input has " + count + " chars."); ^ 2 errors
この場合も、プログラムのコンパイルは失敗し、.class
ファイルは作成されません。 エラーを修正し、再度コンパイルしてください。
実行時の問題
Microsoft Windowsシステムでのエラー・メッセージ
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp
このエラーが発生した場合、java
は、バイトコード・ファイルHelloWorldApp.class
を参照できていません。
java
が.class
ファイルの検索を試みる場所の1つは、現在のディレクトリです。 このため、.class
ファイルがC:\java
にある場合、現在のディレクトリをそのディレクトリに変更する必要があります。 ディレクトリを変更するには、プロンプトで次のコマンドを入力して[Enter]キーを押します。
プロンプトがC:\java>
に変更されます。 プロンプトでdir
と入力すると、.java
ファイルと.class
ファイルが表示されます。 この状態で、再度java HelloWorldApp
と入力します。
まだ問題が発生する場合は、CLASSPATH変数の変更が必要となる可能性があります。 この変更が必要かどうかを確認するには、次のコマンドでクラスパスを上書きしてください。
set CLASSPATH=
この状態で、再度java HelloWorldApp
と入力します。 プログラムが動作するようになった場合は、CLASSPATH変数を変更する必要があります。 この変数の設定方法については、
JDK 6インストール手順で該当するセクションを参照してください。 同じ方法でCLASSPATH変数を設定します。
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp/class
初心者プログラマーによくある失敗は、コンパイラによって作成された.class
ファイルに対してjava
ランチャを実行しようとすることです。 たとえば、java HelloWorldApp
ではなくjava HelloWorldApp.class
でプログラムの実行を試みると、このエラーが発生します。 引数は使用するクラス名であり、ファイル名ではないことを覚えておいてください。
Exception in thread "main" java.lang.NoSuchMethodError: main
Java VMでは、実行するクラスに、アプリケーションの実行を開始する場所を示すmain
メソッドが含まれている必要があります。
"Hello World!"アプリケーションの詳細セクションで、main
メソッドについて詳しく説明しています。
UNIXシステムでのエラー・メッセージ
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp
このエラーが発生した場合、java
は、バイトコード・ファイルHelloWorldApp.class
を参照できていません。
java
がバイトコード・ファイルの検索を試みる場所の1つは、現在のディレクトリです。 このため、たとえばバイトコード・ファイルが/home/jdoe/java
にある場合、現在のディレクトリをそのディレクトリに変更する必要があります。 ディレクトリを変更するには、プロンプトで次のコマンドを入力して[Return]キーを押します。
プロンプトでpwd
と入力すると、/home/jdoe/java
が表示されます。 プロンプトでls
と入力すると、.java
ファイルと.class
ファイルが表示されます。 この状態で、再度java HelloWorldApp
と入力します。
まだ問題が発生する場合は、CLASSPATH環境変数の変更が必要となる可能性があります。 この変更が必要かどうかを確認するには、次のコマンドでクラスパスを上書きしてください。
unset CLASSPATH
この状態で、再度java HelloWorldApp
と入力します。 プログラムが動作するようになった場合は、上述のPATH変数と同じ方法でCLASSPATH変数を変更する必要があります。
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp/class
初心者プログラマーによくある失敗は、コンパイラによって作成された.class
ファイルに対してjava
ランチャを実行しようとすることです。 たとえば、java HelloWorldApp
ではなくjava HelloWorldApp.class
でプログラムの実行を試みると、このエラーが発生します。 引数は使用するクラス名であり、ファイル名ではないことを覚えておいてください。
Exception in thread "main" java.lang.NoSuchMethodError: main
Java VMでは、実行するクラスに、アプリケーションの実行を開始する場所を示すmain
メソッドが含まれている必要があります。
"Hello World!"アプリケーションの詳細セクションで、main
メソッドについて詳しく説明しています。