• ベストアンサー

ServletからバックグラウンドでJavaを走らせたい

Javaのバッチをコマンドラインからでなく、Servletから非同期で走らせたいのですが、うまくいきません。 多数サイトを見ましたが引数なしの場合でも、JavaをServletのバックグラウンドで走らせる事はできませんでした。5時間はまっています(T_T) Process process = Runtime.getRuntime().exec("java C:\\java\\src\\batch\\testJava argv01 argv02"); ■環境は、JDK1.4.1、Tomoat4.1.6、Windos2000で、 javaを打ち間違えたら、例外が発生したのでjavaだけはとりあえずパスがとおっているようです。 よろしくお願いします。

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

  • ベストアンサー
  • yuji
  • ベストアンサー率37% (64/169)
回答No.2

クラスパスを java -classpath C:\\java\\src\\batch argv01 argv02 のように指定するとどうなりますか?

matchori
質問者

お礼

yujiさん。ありがとうございます。 とりあえずバッチを他のディレクトリから、 コマンドラインで実行できるようになりました(;_;) あとは、 Servletからの実行ですが取り急ぎお礼申し上げます。

その他の回答 (2)

  • run_away
  • ベストアンサー率42% (8/19)
回答No.3

スレッドつくってその中ではしらせてはいかがでしょう。割と簡単だし、DOSコマンドを叩くよりも拡張性も高くていいように思いますが。 まぁ、現在の問題もどうしてそうなったのか知っておいた方がいいですね。今度は (XO)「ServletからバックグラウンドでVBのEXEを走らせたい」という質問を投げることになりかねませんよ。 (XO)は困った顔のつもり。。。

matchori
質問者

お礼

別案ありがとうございます。 今回はスレッドを使用しませんでしたが、 習得する時間がある時に試してみようと思います。 ありがとうございました。

noname#30871
noname#30871
回答No.1

 Javaに限らず、どんな言語でも「うまくいきません」「できません」「はまっています(T_T)」では半永久的に動きませんよ。  具体的に「どういう現象になってしまうのか」「動作条件を変えればどうなるのか」を挙げないと。それがデバッグというものです。  たとえば "java C:\\java\\src\\batch\\testJava argv01 argv02" ですが、これはコマンドラインから叩けば動くのですか。バッチ自体には間違いはないのですか。argv01, argv02を変えるとどうなりますか。バッチではなく、exeファイルだったら動きますか。などなど。  「うまく動かなかったけど、適当にいじったら何となく動くようになったよラッキー♪」なプログラムは、お客さんにはとても納品できません。

matchori
質問者

お礼

お返事ありがとうございます。 バッチ自体は間違いないのですが、 "java C:\\java\\src\\batch\\testJava argv01 argv02" を、コマンドラインでたたくと、 ClassNotFoundになってしまいました。 C:\java\src\batchへ移動し、 testJava argv01 argv02では動作するので、 パスの設定と思われますが、環境変数classpath には、C:\java\src\batchを書いています。 JavaはCGIなどに比べるとパス関係が難しいです。。

関連するQ&A