4

Runtime クラスを使用して、ソフトウェアのインストールを実行しています。ただし、それは機能しません。つまり、(Runtime クラスを使用して作成された) ジョブを起動した後、しばらくすると (すぐに) インストール ジョブが終了します。問題は、メインスレッドが終了し、Runtime クラスを使用して作成された Process を強制終了する必要があることだと思います。私は正しいですか?そして、ここでの解決策は何ですか?

これは、メインクラス内でジョブを起動する方法です:

try
        {
            Runtime.getRuntime().exec(cmd);
        }                               
        catch(IOException e)    
        {   
            //add logging functionality
            e.printStackTrace();
        }

このコマンドの直後に、メイン関数が終了します。

ランタイム コマンドに問題はありません。それは動作します..それが開始されているのを見ることさえできます(コードを介して起動しているインストール)、そして突然終了します。

4

3 に答える 3

5

java.lang.Processクラスを確認することをお勧めします。あなたはおそらくこのようなものが欲しいでしょう:

        Process process = Runtime.getRuntime().exec(cmd);
        process.waitFor();

サブプロセスはSIGHUPを受信して​​終了している可能性があります。

編集:

コンテキストでは、このようなもの、私は思うでしょう:

    try
    {
        Process process = Runtime.getRuntime().exec(cmd);
        process.waitFor();
    }                               
    catch(IOException e)    
    {   
        //add logging functionality
        e.printStackTrace();
    }
    catch(InterruptedException e)    
    {   
        e.printStackTrace();
    }
于 2012-06-21T12:53:25.473 に答える
1

作成されたプロセスは、メイン スレッドの子プロセスです。メインスレッドが終了すると、コマンドを手動で実行してウィンドウを押すctrlcか閉じた場合と同様に、プロセスが強制終了されます。

于 2012-06-21T12:54:52.820 に答える
0

これは単なる推測ですが、コードにエラーがあるため(論理)、すぐに終了するwhileループが発生する可能性があるため、プログラムを終了すると思います。

ランタイムが実行するコードをよく見てみてください。

プロセスはおそらくデッドロック状態にあります。解決策は、サンプルとともにコメントにあります。

于 2012-06-21T12:52:10.310 に答える