- PR -

コマンドプロンプト上からの実行

1
投稿者投稿内容
カブトムシ子太郎
会議室デビュー日: 2006/04/12
投稿数: 16
お住まい・勤務地: 横浜
投稿日時: 2007-10-12 00:54
こんにちは。JAVA初心者です。

現在、Eclipse上でプログラムを作成し終わりEclipse上からも正常にプログラムが実行
されていることを確認しました。

しかしながら、コマンドプロンプト上から実行させると、どうもうまく動きません。
おそらく、クラスパスの設定などがうまく行えていないと考えていますが、どうも
理解不足のためか、原因をはっきりさせることができなく困っています。

自分の作成したプログラムは、Execute.javaというクラス一つで、これをコマンドプロンプト
から引数を渡して実行させたいと思い、次のようなコマンドを入力させて実行させました。

java -classpath C:\\workspace\\ReNameFile Execute "パス1" "パス2"


Execute.javaはPC上で"C:\\workspace\\ReNameFile"に存在するため、このExecute.javaをJAVA_VMに
認識させるために、クラスパスにC:\\workspace\\ReNameFileを指定しました。

これで、C:\\workspace\\ReNameFileのExecute.javaをJAVA_VMが認識して実行できている
と思いますが、このプログラムを実行している時に、以下のようなエラーがでます。

Exception in thread "main" java.lang.NullPointerException
at Execute.processYear(Execute.java:40)
at Execute.main(Execute.java:31)

Eclipse上ではNullPointerExceptionは発生していないのですが、コマンドプロンプト上から
実行させると発生してしまいます。

「システムのプロパティ」→「詳細」→「環境変数」でCLASSPATH環境変数を設定の
部分には、".;%JAVA_HOME%\lib\tools.jar"と設定しています。
これで、JAVA_VMからJAVAのライブラリを参照できているということですよね?
そのため、クラスパスオプションには、上記のパスだけを指定すれば良いと思ってます。

何か、クラスパスに他のパスを指定しなくてはいけないのでしょうか?
何か勘違いをしている部分はありますでしょうか?

[ メッセージ編集済み 編集者: カブトムシ子太郎 編集日時 2007-10-12 01:14 ]
権兵衛
ベテラン
会議室デビュー日: 2002/09/24
投稿数: 50
投稿日時: 2007-10-12 01:29
例外の内容、スタックトレースの見方は理解してますか?
APIリファレンスを参照して発生している例外がなんであるかをしらべて、スタックトレースに出てる内容を元にソースを確認してください。
Ray
ベテラン
会議室デビュー日: 2007/09/13
投稿数: 88
投稿日時: 2007-10-12 01:30
> これで、C:\\workspace\\ReNameFileのExecute.javaをJAVA_VMが認識して実行できている

これは原因ではないようですが。
javaが認識するのはExecute.classというクラスファイルかと。
偶然同じところに作ってるから認識されているようですが。

存在しないクラス名を指定した場合、NoClassDefFoundErrorが発生します。
$ java hogehoge
Exception in thread "main" java.lang.NoClassDefFoundError: hogehoge

Eclipseはいろいろなpathを追加しているので、そこに依存したプログラムを書いているのかも知れません。
Eclipse上でSystem.getProperty("java.class.path")を表示してみるとわかるかも知れません。

または引き数の与え方に問題があるのではないでしょうか。"パス1" "パス2"というやつ。
シェル(コマンドライン)の展開というものによって、意図しない結果となっている場合があります。mainの中でSystem.outに出力して渡せているかチェックしてみてはいかがでしょう。

後はプログラムを見ないとなんとも言えません。
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2007-10-12 10:32
引用:

カブトムシ子太郎さんの書き込み (2007-10-12 00:54) より:
Exception in thread "main" java.lang.NullPointerException
at Execute.processYear(Execute.java:40)
at Execute.main(Execute.java:31)


権兵衛様の仰るとおり、エラーメッセージについて理解した方が良いです。
上のエラーからは、「Execute.javaの40行目でnull参照されている」ということみたいです。
カブトムシ子太郎
会議室デビュー日: 2006/04/12
投稿数: 16
お住まい・勤務地: 横浜
投稿日時: 2007-10-12 22:56
みなさんありがとうございいました。
Eclipse上とコマンドプロンプト上からの実行結果に差異があるのは、
Eclipse上からだと、意図したとおりに引数がMainメソッドに渡されるものの、
コマンドプロンプト上からだと、うまく引数が受け取れていないことが原因でした。

パスを引数としていたため、それをプログラム上でインスタンスしているFile
オブジェクトを参照していたため、Nullpointerが発生していたようです。

みなさん、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)