path,classpath


パス(path),クラスパス(classpath)について

コンパイルがうまくいかない場合

Q. javac コマンドを実行したときに、

『コマンドまたはファイル名が違います』や
『'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。』

と表示されてコンパイルできません。

A. もし上記のようなエラーがでたときは、環境変数PATHの設定が正しくなされていない可能性があります。

このエラーは、あなたが実行させようとした javac コマンドがシェルによって発見できなかった場合に起こります。

「環境変数PATH」は、単に「パス」とか「path」とも呼ばれます。

「シェル」は OS に拠っては「コマンドプロンプト」とか「DOS窓」とも呼ばれます。

実行がうまくいかない場合(その1)

Q. javac Hello.javaでコンパイルはできたのですが、 java Helloを実行しようとすると

『Exception in thread "main" java.lang.NoClassDefFoundError: Hello』

と表示されて実行できません。

A. もし上記のようなエラーがでたときは、クラスパス(classpath)の設定が正しくなされていない可能性があります。

このエラーは、あなたが実行させようとした Hello.class ファイルが Java 実行環境によって発見できなかった場合に起こります。

java Helloを実行しようとしたのに、間違って、java Hello.classとか、java Hello.javaとか、java helloと入力してしまった場合にも、このエラーが表示されるかとおもいます。

入力すべきコマンドはjava Helloです。クラス名のあとに.class.javaなどの拡張子は不要です。またクラス名の大文字・小文字が違っていても正しく動きません。クラスパスの設定は正しいのにこのエラーがでる場合は、入力したコマンドに、大文字・小文字の打ち間違いがないか、もう一度よくチェックしてみましょう。

実行がうまくいかない場合(その2)

Q. javac Hello.javaでコンパイルはできたのですが、 java Helloを実行しようとすると

『Exception in thread "main" java.lang.NoSuchMethodError: main』

と表示されて実行できません。

A. もし上記のようなエラーがでたときは、mainメソッドが正しく記述されていない可能性があります。

このエラーは、あなたが実行させようとした Hello クラス内に、publicであり、かつstaticであり、かつ戻り値の型が voidであり、かつ引数を1つだけとり、かつその唯一の引数の型がStringの配列であり、かつ、名前が小文字4文字のmainであるようなメソッドが Java 実行環境によって発見できなかった場合に起ります。

以下に、正しい main メソッドを書くためのチェックリストを示します。

  • mainメソッドに、ちゃんとpublicはついていますか?
  • mainメソッドに、ちゃんとstaticはついていますか?
  • mainメソッドの戻り値の型は、ちゃんとvoidに、なっていますか?
  • mainメソッドの引数は、ちゃんとStringの配列になっていますか?
  • mainメソッドの名前は、ちゃんと小文字4文字のmainになっていますか?

正しいmainメソッドの例は以下の通りです。

public static void main(String[] args) {
}

正しいmainメソッドのもう一つの例。

public static void main(String[] iAmVeryHappyToday) {
}

実行がうまくいかない場合(その3)

また、たいがいのアプレットは、javaコマンドでは起動しません。javaコマンドで起動しないアプレットを java コマンドで実行したときにも、NoSuchMethodErrorが表示されます。


パス,クラスパスとはなにか?

パス(path)とは

pathは日本語に直すと通路とか通り道という意味です。通り道という言葉の意味通り、このpathを設定すれば、現在いるディレクトリと他のディレクトリとの間に通り道を作ることができます。 あくまでパスであって、パスワードと同じようで違います。

具体的に言うと、たとえばjavac.exeファイルがC:\jdk1.6.0_02\binディレクトリにあったとしたら、このディレクトリをpathに設定すれば、カレントディレクトリ(現在あなたのいるディレクトリ)が、どこであろうと、javacと入力するだけで、javac.exeファイルを呼び出すことができるようになります。

もしpathを設定していなければ、javac.exeファイルを起動するために、いちいちC:\jdk1.6.0_02\bin\javacと入力しなければなりません。pathを設定しておけば、わずかjavacと5文字、入力するだけですむようになるわけです。

別段、Javaを使用するうえで、絶対に設定しなければいけないものではありませんが、設定しておくと格段に便利です。ただ最近はEclipseNetBeans?など使い勝手のよい統合開発環境があるので、そういったものをインストールしたほうが利便性は高いかもしれません。

参考 java コマンドがうまく動きません。なぜ?

クラスパス(classpath)とは

クラスパスとはなにか(JavaFAQ 基礎知識)

パス,クラスパスの設定のしかた

Windows


*パス(path)の設定のしかた。

Java Standard Edition インストールガイド を良く読んで、javac.exe のあるディレクトリ(例: C:\jdk1.6.0_02\bin)のパスを環境変数PATHに追加してください。

おなじWindowsでもXP,ME,98などで設定の仕方はそれぞれ違います。リンク先をよく読んでお使いのOSにあわせて設定してください。

その後、Windows3.1/95/98/MEの場合はOSを再起動、 WindowsNT/2000/XPの場合はコマンドプロンプトを立ち上げなおしてください。 設定したパスが正しければ、どのディレクトリからもjavacが使えるようになります。 それでもコマンドまたはファイル名が違いますというエラーが出る場合は、設定した値が間違っています。よく見直してください。

設定された値が機能しているかどうかは、シェルプロンプト上で

echo %PATH%

と入力するかまたは

set

と入力することで確認できます。

*クラスパス(classpath) の設定のしかた。

コマンドプロンプトで、

set CLASSPATH=%CLASSPATH%;.

と設定する。最後の「;」と「.」を見落とさないように! または、クラスパスの設定方法は?を読んでカレントディレクトリ「.」を環境変数CLASSPATHに追加してください。

Linux,UNIX系OS

*パス(path)の設定のしかた。

Java 2 SDK, Standard Edition インストールガイド を良く読んで、javac のあるディレクトリ(例: /usr/java/bin)のパスを環境変数PATHに追加してください。

おなじUNIX系OS(Linux, Solaris, FreeBSDなど)でも設定の仕方はそれぞれ違います。リンク先をよく読んでお使いのOSにあわせて設定してください。

UNIX系OSでは、お使いのシェルによって設定方法が異なります。 自分のシェルが何であるかわからないときは、シェルプロンプト上で以下のようにして確認することができます。

echo $SHELL

自分の使用しているOSにどのようなシェルが入っているかを確認するには、 シェルプロンプト上で

ls /bin/*sh

と入力することでわかります。 ここでは、主にsh,bash,csh,tcshを対象に、主にbashを基準に説明しています。 PATHの設定は、以下にように既存のパス変数に追加する形にすると、以前に設定されていたPATHが消えずに済み無難です。

あなたがお使いのシェルがsh,bashの場合は .shrc または/etc/bashrc, /etc/profile $HOME/.bash_profileなどに

export PATH=$PATH:/usr/java/bin

を追加します。

あなたがお使いのシェルがcsh, tcshの場合は.cshrc, tcshrc, /etc/cshrc, /etc/profileなどに

setenv PATH $PATH:/usr/java/bin

を追加します。 シェル環境変数ファイルの場所、名前はOSやディストリビューションなどによって異なります。

その後、語尾がhrcで終わるファイルを編集した場合はシェルを再起動、 profileなどの名前が付くファイルを編集した場合は再ログイン、 もしくは、編集したファイルを以下のようにしてシェルプロンプト上で、 (ここでは.bashrcを例にとります。)

source .bashrc

と入力してください。

UNIX系OSの場合は、OSを再起動する必要がありません。 設定したパスが正しければ、どのディレクトリからもjavacが使えるようになります。 それでもコマンドまたはファイル名が違いますというエラーが出る場合は、設定した値が間違っています。よく見直してください。

設定された値が機能しているかどうかは、シェルプロンプト上で

echo $PATH

(大文字、小文字に注意)と入力することで確認できます。

*クラスパス(classpath) の設定のしかた。

sh,bashの場合

export CLASSPATH=$CLASSPATH:.

csh, tcshの場合

setenv CLASSPATH $CLASSPATH:.

と設定する。最後の「:」と「.」を見落とさないように! なお、UNIX系OSのシェルではWindowsとは違いパス区切りに「;」の代わりに「:」を使用し、変数呼び出しに「%」を変数の両端につける代わりに「$」を先頭につけます。

クラスパスの設定方法は?を読んでください。

CONTENTS

最新の20件

2005-12-06 2006-11-04 2012-07-15 2009-06-19 2011-03-03 2006-12-13 2007-11-05 2014-07-22 2014-07-19 2014-07-09 2014-06-21 2014-01-14 2012-09-03 2012-03-28

今日の6件

人気の30件

  • counter: 94752
  • today: 1
  • yesterday: 1
  • online: 1