• ベストアンサー

batよりjava起動

お世話になっております。 javaのclassを実行する 以下の処理を行うbatファイルを作成したところ (ディレクトリ移動→classpathの設定→javaコマンド) cmd.exeよりこのbatファイルを実行すると 正常に動作してくれるのですが batファイルをダブルクリックすると javaを正常に実行しません。 errorや例外も特に発生していません。 batファイルを cmd.exeからの実行するのと ダブルクリックで実行するのには 何か違いがあるのでしょうか? 最終的な目的はタスクにこのbatを登録し 指定した時間に定期的に実行する事なのですが、 タスクにbatを登録して実行した場合 batをダブルクリックした時と同様の現象になり 正常に動作しませんでした。 原因をご存知の方がいらっしゃいましたら 教えて頂けないでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

僕も#2さまに見習って、ソースコードを書こうかと思います。バッチプログラミングはかなり勉強したので・・ ソースファイルをhoge.javaとします。作業ディレクトリをC:\Javaとします。 ↓のようになります。 cd C:\java javac hoge.java && java -cp . hoge バッチプログラミングで「&&」は直前の処理が成功したら(この場合コンパイルエラーがなかったら)、次のコマンドを実行します。ただ、このバッチファイルの短所はjavaコマンドに引数を(String args[])を渡せないことです。。本当はできるんですが、書くと長くなるので・・ ちなみに、>「(ディレクトリ移動→classpathの設定→javaコマンド)」の順番どおりに書くと↓です。 @echo off cd c:\java set classpath %CLASSPATH%;. javac hoge.java && java hoge 最後に、カレントディレクトリまでのパスにスペースがあったらパス自体をダブルクォーテーションで囲ってくださいね。例↓。 cd "C:\Program Files\java" では、がんばってください。何かの参考になればと思って書かせていただきました。

kawakami2005
質問者

お礼

今回の件とは直接関係ありませんでしたが 勉強になる情報を丁寧に提供していただきありがとうございました。

その他の回答 (2)

  • potch
  • ベストアンサー率34% (24/70)
回答No.2

自分の環境で同様のことをする場合、 @echo off cd aaa\ java -cp . hoge で、クラスファイルの実行はできます。ただし、実行が終わるとコマンドプロンプトも終了してしまうので、pauseを最後に入れると、何かのキーを入力するまでウィンドウを開いたままにできます。 例 @echo off cd aaa\ java -cp . hoge pause # hogeはクラスファイルです。

kawakami2005
質問者

お礼

今回の件とは直接関係ありませんでしたが 情報提供していただきありがとうございました。

回答No.1

batファイルをダブルクリックした場合、基本的に処理をしたら、すぐにコマンドプロンプトが閉じます。バッチファイルは本来様々な処理をするためだけのファイルですので、いつまでもコマンドプロンプト(DOSプロンプト)を開いておく必要性はないのです。 ですから、Javaのコンパイルやディレクトリ移動でbatファイルを使う場合、コマンドプロンプトを開いておいて、そこからバッチファイルのあるディレクトリ\バッチファイル名をタイプします。 そうすればお望みの処理ができるはずです。 また、バッチファイルを入れるフォルダを決めておいて、そのフォルダを環境変数PATH(Javaをインストールしたときにも設定しましたね)に設定しておけば、コマンドプロンプトからバッチファイル名だけをタイプすれば良いです。ですから、そうしたほうがJavaだけでなくCやPerlのコマンドを使う際にも便利です。 タスクにbatを登録しても同様な症状が出るのは普通です。余分なタスクは増やさないほうがいいですよ・・ では、がんばってください。

kawakami2005
質問者

補足

ご回答ありがとうございます。 本文にも書いた通り コマンドプロンプトからタイプして実行した場合は javaのプロセスが正常終了し BATファイルをダブルクリックした場合で javaのプロセスが正常に終了しないのです。 (例外やエラーが発生せずスレッドが落ちる。) なんとか原因が判明し、 BATファイルの文字コードが原因でした。 解りづらい質問をして申し訳ありませんでした。