- ベストアンサー
Runtime#proccessのwait
//Batch part RunBatch(batchName); //sleep(1000); //B-part Systems.out.println("B-part"); --------------------------------------------------------- public void RunBatch(String BatchName)throws Exception { Process pr = null; Runtime runtime = Runtime.getRuntime(); pr = runtime.exec("cmd.exe /c start "+BatchName); try { int exitCode = pr.waitFor(); if(process != null) { process.getErrorStream().close(); process.getInputStream().close(); process.getOutputStream().close(); process.destroy(); } } catch (Exception e) { e.printStackTrace(); } } このままですとバッチの処理が長い場合、処理が終了する前にB-partへ 処理が移行してしまいます。 とりあえずでwaitをかけてはいるのですが、完全にバッチ処理が終了 するまでB-partへ移行させない方法はありませんでしょうか? おそらくバッチファイルから結果出力させてJAVA側でフックするとは思うのですが、具体的にどう組めばいいのかが分かりません。
- みんなの回答 (6)
- 専門家の回答
関連するQ&A
- Runtime クラスのexecメソッドについて
javaで、Runtimeのexec()メソッドを使って、出てきた内容をJTextAreaに出力したいと思っています。つまり、JTextAreaをコマンドプロンプト風にしたいと思っています。しかし、exec()メソッドの戻り値である、Processクラスがいまいちよくわかりません。仕様書(日本語訳)を読んでもProcessクラスのgetInputStream()メソッドやgetOutputStream()メソッドの説明がいまいちピンときません。 try{ Process process = Runtime.getRuntime().exec("hogehoge"); /*---------------------------------------------------------*/ ここで、いかにしてJTextAreaに出力するのかわかりません /*---------------------------------------------------------*/ }catch(Exception e){ } どうか、わかる方よろしくお願いします。
- ベストアンサー
- Java
- Runtime.execについての質問
こんにちは、Makotoと申します。 Runtime.execを使って、ディレクトリを作成する プログラムを作っているのですが、下記のプログラムで ディレクトリは作成されるのですが、コマンドプロンプト画面が 立ち上がったままになってしまいます。閉じようと思い、8行目でexitコマンド を発行してみたのですが、うまくいきませんでした。このウィンドウを閉じる 方法はあるのでしょうか? 1:public class test{ 2: public static void main(String[] args) throws Exception { 3: Runtime rt = Runtime.getRuntime(); 4: Process pr; 5: try { 6: Process proc1 = rt.exec("cmd /C start /MIN 7: mkdir c:\\\poi\\test"); 8: proc1 = rt.exec("command.com, /, exit"); 9: } catch (java.io.IOException e) { 10: System.err.println(e); 11: System.exit(1); 12: } 13: 14: } 15:}
- ベストアンサー
- Java
- 外部コマンドの実行について
・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
- ベストアンサー
- Java
- プログラムからの返答の意味がわかりません..
import java.io.*; public class Teme { public static void main(String [] args) { String [] command = { "C:\\Users\\yuzumodoki\\Desktop\\chunkparser-1.0\\chunkparser-1.0\\parser.exe", "aaaa" }; // 外部プログラムを実行 Runtime runtime = Runtime.getRuntime(); Process process = null; try { process = runtime.exec(command); } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } // 外部プログラムの標準出力から読み込み BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); System.out.println(br); try { String line; while((line = br.readLine()) != null) { System.out.println(line); } } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } finally { try { br.close(); } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } } } } 上記のプログラムはparser.exeにアクセスし,そのアプリケーションに文字列を送り,処理をしてその結果を取得するというものです. 本来"aaaa"と送ると"(aaaa aaaa)"と返ってくるプログラムなのですが, java.io.BufferedReader@89ae9e と返ってきます.これはなぜだかわかる方いらっしゃいますか?また,aaaa aaaaと本来の値を返すにはどうすればいいかわかる方いらっしゃいませんか.. もしわかる方いらっしゃたら教えて頂けたらすごくうれしいです(つj)
- 締切済み
- Java
- process has not exited
実行可能なjarファイルをコマンド実行しその戻り値を取得したくて下記プログラムを書きました。 ところがprocess.exitValue() のところで process has not exited というエラーを起こしてしまいます。原因はお分かりになりますでしょうか。 String command = "java -jar test.jar test; Process process = Runtime.getRuntime().exec(command); System.out.println("▼▼▼実行中のコマンド=" + command); //int no = process.waitFor(); //exec()が非同期実行であるため実行結果が返ってくるまで待つ System.out.println("▼▼▼コマンドの実行完了"); BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = null; while ( (line = in.readLine())!=null ) { line = in.readLine(); System.out.println(line); } System.out.println("★★★コマンドの戻り値=" + process.exitValue()); if(process.exitValue() != 0) { process.destroy(); } in.close(); } } catch(Exception e) { if( process != null ) { process.destroy(); } e.printStackTrace(); }
- ベストアンサー
- Java
- Javaプログラムから外部コマンドを呼び出す
String com = "ls -l"; Process pro = Runtime.getRuntime().exec(com); 上記のようにして、外部コマンドを実行しています。 この方法を使用すると投げたコマンドが終了してしまうまで、後の処理が行われません。 バックグラウンド処理を行いたかったので、 String com = "ls -l &"; Process pro = Runtime.getRuntime().exec(com); としてみましたが、結果は変わりませんでした。 何か別の指定方法が存在するのでしょうか。 ご存知の方、ぜひ教えてください。
- ベストアンサー
- Java
- シェルが実行されません
WWWユーザから、 Process process = Runtime.getRuntime().exec("java -classpath /xx/xx/xx /export/home/test/B001"); は動くのですが、 Process process = Runtime.getRuntime().exec("java /export/home/test/B001.sh"); のようにシェルを呼び出しても動作しません。 また、hulftのジョブ起動からもシェルが動かないのですが、原因は何が考えられますでしょうか? シェルのパーミッションは755なのですが・・
- 締切済み
- Java
- Runtime.exec()について
Runtime.exec()について質問させて下さい。 現在、Windowsのサーブレット上のファイル操作で ファイルの属性ごと(読み取り専用)コピーしたいので Runtime.exec()からxcopyコマンドを呼び出してコピーしています。 (JavaのAPIでは属性ごとコピー、属性変更ができない!?ため) エディタはeclipse3.5を使用しております。 eclipse上のTomcat6.0では綺麗にコピーしてくれるのですが、 Tomcat6.0のみでの実行ではコピーできません(0個のファイルをコピー) eclipse3.5上のTomcat設定とTomcat自体のJVM設定でのJREパスは同じJRE を参照しています。常にEclipseを起動させた状態!!ってのは厳しいので なんとかTomcatのみでコピーを成功させたいので助言お願いいたします。 下記ソースで 4個の読み取り属性を強制上書きコピーしますと、表示は Eclipse3.5上では → 「4個のファイルコピーに成功」表示 Tomcat6上では → 「0個のファイルコピーに成功」表示 となります。。。 【以下ソース】 CopyFrom = "コピー元パス"; CopyTo = "コピー先パス"; try{ String[] cmd = new String[]{"cmd","/c","xcopy",CopyFrom+"*.*",CopyTo,"/y","/r","/k","/h"}; Runtime Run = Runtime.getRuntime(); Process process = Run.exec(cmd); //実行結果取得 InputStream is = process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String Line = null; while((Line = br.readLine()) != null){ System.out.println(Line); } }catch(IOException e){ System.out.println(e); } 【環境】 ・Windows Server2003 ・Java1.6.0_13(パスは通しています) ・Tomcat6.0.14
- ベストアンサー
- Java
- tomcatでのPDF出力について
現在、tomcat 7.0+struts 2.2.3 + java 1.6 にてPDFの印刷を行うプログラムを作成しています。 AcrobatReaderをコマンドラインで呼び出して印刷したかったのですが、 eclipse上では正常に動作するのですが、いざtomcatにwarでアップロードし、実行すると エラーもはかれず処理が終了してしまいます。 下記が、処理されなかった部分です。 String cmd = "cmd /c START AcroRd32.exe /t " + "ファイル名"; System.out.println(cmd); ←ここの出力結果を「cmd /c 」を除いてコマンドプロンプトでたたくと正常に印刷されます。 Process p1 = Runtime.getRuntime().exec(cmd); p1.waitFor(); 原因がわかる方いらっしゃいましたらご教授お願い致します。
- ベストアンサー
- Java
- 助けて下さい!Runtime Erroについて
非常に困っています!IEを開くと、ほぼ同時にruntime erroが表示され これが一旦出てくるとIEを閉じざるを得ない状況にされます。何度IEを開いても、このエラーが出てきてしまうので事実上ほぼIEが使えない状況です。まず機種はDELLのINSPIRON4000 PP01L Windows2000です。 そしてIEを開くと始めにRuntime Library Runtime Erro! Program:c¥Program Files¥Internet Explorer¥IEXPLORE.EXE This application has requested the Runtime to terminate it in an unusual way. Please contact the application`s support team for more information. が出てきて、その次に IEXPLORE.EXEアプリケーションエラー "0x10094c3b"の命令が"0x01fcc3e8"のメモリを参照しました。メモリが'read"になることはできませんでした。プログラムを終了するにはOKをクリックして下さい。 で、OKをクリックするとIEが閉じてしまいます。 その後すぐに アプリケーションエラー エラーが発生したため、<プロセスは既にあります>を終了します。プログラムをもう1度開始する必要があります。エラーログを作成しています。 の後に ワトソン博士は、アプリケーションをプロセスにアタッチできませんでした。ワトソン博士がアタッチする前にプロセスが終了した可能性があります。 WINDOWS2000エラーコード=87 パラメータが間違っています。 と四つのエラーが次々と出てきます。色々、自分でIEをダウンロードし直したりと努力してみたんですが、もう お手上げです。非常に困っているので誰か、お力をお貸し下さい。 ウイルス対策はウイルスキラーを使っています。宜しくお願いします。
- ベストアンサー
- その他(ソフトウェア)
お礼
auty様 返事送れて申し訳ございません ご回答ありがとうございました。 確かにちゃんとプロセスが終了するまで待機するようになりました。 とりあえずこの処理にて運用してみます。 これは私の我侭ですがサーバマシンにはあまり入れたくなかったので 別のアプローチ法も考えています。