明らかにこれはチラシの裏・・・

Javaからバッチファイル起動→JAVAで戻り値取得とかしたかったんだが、
どうもRuntime.getRuntime().exec()のところでcmd.exe /c 以下略とかしたら
バッチのERRORLEVELを拾ってきてくれないようで。
バッチファイル内でEXITした時点で「CMD.EXEは正常終了!」になるようで
その内部で動いてるバッチは関係ねえよJKっていう状態みたい?
まあ、実行してるのがあくまでもCmd.Exeだからしょうがないっていえばそれまでのような。

CmdのEXITのオプションで[EXIT /B 返り値]という設定もあったりするんだが、
入れてみたらEXITすらしねえというステキなゴミだったんで使うのをやめますた。

手打ちしたらEXITするんだけどね。それじゃあ意味なさすぎる。。。

ぶっちゃけ言うと、Cmd依存のプログラム(copyとかdirとかdeleteとか?)使わない限り
バッチファイル自体を経由する必要性無いんでいいやって感じです。


つうわけで以下JAVAからEXE起動して返り値とEXEでのメッセージ出力するようなのをメモっておく。
あきらかにすぐ忘れそうな俺専用です。。99.999%の一般人は見なくても良いと思われ


import java.io.*;
public class test{
public static void main(String[] $params){
try{
//EXEの指定と実行
String $cmd = "XXXX.exe";
Process $proc = Runtime.getRuntime().exec($cmd);
$proc.waitFor();
//標準出力
InputStream $inputs = $proc.getInputStream();
printInputStream($inputs);
//標準エラー
InputStream $errors = $proc.getErrorStream();
printInputStream($errors);
//返り値取得
int $rc = $proc.exitValue();
if ($rc == 0){
//返り値0だったときに何かするとき用(なんもいれてないが)

}else{
//返り値0で無かったらErrorlevel=1で終了
System.exit(1);
}
} catch(Exception e) {
// ログ出力
System.out.println( ".run():例外発生:" + e);
System.exit(1);
}
}
public static void printInputStream(InputStream $inputs) throws IOException {
BufferedReader $br = new BufferedReader(new InputStreamReader($inputs));
for (;;) {
String $line = $br.readLine();
if ($line == null) break;
System.out.println($line);
}
}
}
}


InputStreamとかの部分はバッファサイズとかあるようで、
あるページには大量にメッセージ吐くヤツにはこの書き方は向いてないらしいが

現状俺には2行しかメッセージ吐かないんで問題なかったりもする。

java関係のページ見ていると変数に$つけているところはほとんどないんですがね。
あきらかにphpからの慣れでつけてます。
まあ、後輩に教えるときにどこが変数なのかってのが
よくわかるだろうという意味合いも含めてつけてみてたんだが、他に頭に$つけている人どれだけいるんだか・・・



認証、名前入れが面倒だという方はこちらをどうぞ

トラックバックURL

このエントリーのトラックバックURL:
http://www.luminousqueen.com/mt/mt-tb.cgi/782

コメントする



スパム対策の為にCAPTCHA認証を導入しています。

認証について細かいことはこちらをみてください

カテゴリ

サイト内検索


Syndicate this site (XML)
小粋空間
QLOOKアクセス解析