Java ソースコードをコンパイルしたり、アプリケーションを実行する際のトラブルがある場合、おそらくこの節が役立つだろう。 この節の説明では十分でない場合は、使用しているコンパイラあるいはインタプリタの説明書を参照すること。コンパイラの問題
Can't Locate the CompilerUNIXシステムでは、パスが正確に設定されていない場合に、次のようなエラーメッセージを見ることがある。
javac: Command not foundsetenv
あるいは類似のコマンドを使用して、Java コンパイラのあるディレクトリが含まれるように、PATH 環境変数を変更する。Syntax Errors
プログラムの一部をタイプミスした場合、コンパイラは構文エラーを発行することがある。 メッセージは通常、エラーの型、エラーが検出された行番号、その行のコード、およびそのコード内でのエラーの位置を表示する。 次は、文の終了においてセミコロン (
;
)を省略することによって起きたエラーである。エラーがいくつかの行上に階層状にある場合、時々コンパイラは主旨を推測できなくなり、紛らわしいエラーメッセージか複数のエラーメッセージを出力する。 例えば、次のコードの一部は太字の行からセミコロン (testing.java:14: ';' expected. System.out.println("Input has " + count + " chars.") ^ 1 error;
)を省略する。このコードを処理する時、コンパイラは2つのエラーメッセージを発行する。while (System.in.read() != -1) count++ System.out.println("Input has " + count + " chars.");testing.java:13: Invalid type expression. count++ ^ testing.java:14: Invalid declaration. System.out.println("Input has " + count + " chars."); ^ 2 errorscount++
を処理した後に、コンパイラの状態はそれが式の中央にあることを表すので、コンパイラは2つのエラーメッセージを発行する。 セミコロンがなくては、コンパイラは文が完全であることを知ることができない。 コンパイラエラーがある場合、プログラムは正常にコンパイルされず、コンパイラは.class
ファイルを作成していない。 慎重にプログラムを検証して、検出したエラーを修正し、再度試みること。Semantic Errors
プログラムが構文として正しいことの検証に加え、コンパイラは他の基本的なことが正しいかどうかも確認する。 例えば、コンパイラは初期化されていない変数を使用するたびに、警告を出す。
再び、プログラムは正常にコンパイルされず、コンパイラは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
ファイルを作成しなかった。 エラーを修正して、再度試みること。インタプリタの問題
Can't Find ClassUNIX あるいは Windows 95/NT JDK を使用している Java プログラマ初心者の頻出エラーは、コンパイラが作成する
.class
ファイルを解釈しようとすることである。 例えば、もしHelloWorldApp
クラスではなくHelloWorldApp.class ファイル
を解釈しようとすると、インタプリタは次のエラーメッセージを表示する。Java インタプリタへの引数は、使用したいクラス名であり、ファイル名ではない。Can't find class HelloWorldApp.class
The main()
Method Is Not DefinedJava インタプリタはそれを使用して実行するクラスが
main
という名のメソッドを持つことを要求する。インタプリタは、どこか Java アプリケーションの実行を始める場所を得る必要があるからである。main() メソッド では、main()
メソッドについて詳細に説明する。
main()
メソッドを持たない Java インタプリタを使用してクラスを実行しようとすると、インタプリタは次のエラーメッセージを出力する。上記のメッセージで、In class classname: void main(String argv[]) is not definedclassname
は実行しようとしたクラス名である。
Changes to My Program Didn't Take Effect
時々、編集/デバッグ/実行のサイクルにいるとき、print 文が出力しないなど、アプリケーションに対する変更が効力を発しないようにみえる。 これは、 Java Runner を使用している MacOS 上でJava アプリケーションを実行するときによく発生する。
.class
ファイルを再コンパイルする場合は、Java Runner がクラスを再ロードしないので、Java Runner を終了して再起動しなくてはならない。