3

FORTRANコードを呼び出すJavaGUIを使用してアプリケーションを作成しています。ActionPerformedメソッドで以前に作成されたFORTRANコードの変更に基づいて更新およびコンパイルされたファイル(solution.ps)を返したいです。ただし、現在私が持っているコードは、cmdコンパイルの更新された結果を待つのではなく、古いバージョンのファイルを返すだけです。次のステップを完了する前に、cmdにプロセスの実行を待機させる方法はありますか?(cmdから直接実行すると正常に動作します)

検索しましたが、適切な時点で実行を一時停止していないように見えるprocess.waitFor()以外は見つかりません。Thread.waitFor()も試しました。

これは、ユーザー入力を別のプログラムに送信し、これらの入力を使用してコンパイルされた結果を返したい人に役立つと思います。

とにかくここにコードがあります。助けてくれてありがとう。問題を明確にしたいと思います。

String[] command ={"cmd",};
        try {
            Process p = Runtime.getRuntime().exec(command); 
            new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
            new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
            PrintWriter stdin = new PrintWriter(p.getOutputStream());
            stdin.println("cd c:\\g77");     
            stdin.println("g77setup.bat");
            stdin.println("cd c:\\users\\laurence\\workspace\\areaplanner");
            stdin.println("g77 -O4 genpack.f -o genpack");
            stdin.println("genpack");
            stdin.println("5"); 
            /* 
             * The following line sets the time to run the FORTRAN code for  
             * - need to wait for this to complete before calling mpost
             */
            stdin.println("30"); 

            stdin.println("mpost solution.mp");
            stdin.println("latex solution.tex");
            stdin.println("dvips solution.dvi -o solution.ps");
            stdin.close();
            } catch(IOException e4){}
4

2 に答える 2

3

Windowsシェルコマンドのみを実行しています。修正するには、最初にバッチファイルを作成し、それが完了するのを待つことをお勧めします。

String command = "cmd /c mybatchfile.bat";
Process p = Runtime.getRuntime().exec(command);
p.waitFor();

最初のコマンドセットが完了する前に別のセクションを開始するには、別のバッチファイルを作成して、上記を繰り返す必要があります。両方のプロセスが別々のスレッドにあることを確認してください。

于 2012-07-25T11:58:26.093 に答える
-1

現在のスレッドがプロセスがジョブを終了するのを待機するように、waitForを使用してみてください。

Process p = Runtime.getRuntime().exec(command);
p.waitFor()

コード内のコマンドが不完全です。また、のProcessBuilder.start()代わりにを使用することをお勧めしますProcess

于 2012-07-25T11:52:40.000 に答える