• ベストアンサー

外部コマンドの実行について

・Actionクラス public ActionForward Batch(     ActionMapping objActMapping,     ActionForm objActFrm,     HttpServletRequest objHttpRequest,     HttpServletResponse objHttpResponse)     throws Exception {         ActionForward objActFwd = null;         TestForm objTestForm = null;         try {             Runtime runtime = Runtime.getRuntime();             Process process = runtime.exec("c:/Batch/Batch.bat");             objActFwd = objActMapping.findForward("success");           }           catch (Exception e) {             e.printStackTrace();             throw e;           }         return objActFwd; } 以上のActionクラスをJSPからStrutusを介し実行しておりますが バッチファイルが実行されません。 batch.bat単体では実行可能です。 ご教授お願いいたします。 環境:WindowsXP j2sdk1.4.1 Jboss-3.2.3

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

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

考えられる原因をあげてみます。 1.まさかないとは思いますが、クライアント側のバッチを実行しようとしている。 2.バッチ実行でエラーになっている。 2.の場合、単体で実行可能でもJSPからエラーになることがありえる。 実行時のカレントパスの問題であったり、実行権限の問題だったりします。 バッチでエラーになった場合は、Exceptionでは捕らえられませんのでエラーになったことが見つけにくいです。 バッチのエラー内容は、Process#getErrorStreamで確認してみて下さい。

forgedcode
質問者

お礼

hogwan様 ご回答ありがとうございます。 1.についてはANo.2で書いた通り全てスタンドアローンでの作業です。 2.についてはこれからProcess#getErrorStreamにて確認してみたいと思います。

forgedcode
質問者

補足

ActionForward objActFwd = null; TestForm objForm = null; Process process = null;  try {    objForm = (TestForm ) objActFrm;    objForm .setBatchCheck("call");    Runtime runtime = Runtime.getRuntime();    process = runtime.exec("cmd c:/Batch/Batch.bat"); //  process.waitFor();        InputStream stream = process.getErrorStream();    while (true) {         int c = stream.read();         if (c == -1) {         stream.close();         break;     }         System.out.println((char)c); }          objActFwd = objActMapping.findForward("success")     objForm .setBatchCheck("success"); } catch (Exception e) { e.printStackTrace(); throw e; } finally {     if(process != null) { process.getErrorStream().close(); process.getInputStream().close(); process.getOutputStream().close(); process.destroy();    } } return objActFwd; 以上、getErrorStreamにて確認しようとしているのですが 反応が返ってこなくなります。 ブラウザのゲージが少しづつ伸びて1/3程度でとまってしまいます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

cmdもフルパス指定してもダメ? ローカルマシンで動かしているんだよね。

forgedcode
質問者

お礼

rinkun様 再びご回答ありがとうございます。 ご指摘の通り全てローカルPC内での作業です。

すると、全ての回答が全文表示されます。
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

コマンドを "cmd c:/Batch/Batch.bat" にしてみたら動きませんか?

forgedcode
質問者

お礼

rinkun様 ご回答ありがとうございます。 ご指摘の通り修正をしたのですが、何の反応もございませんでした。

すると、全ての回答が全文表示されます。

関連するQ&A