3

おそらく誤解を招くタイトルですが、私の他の質問の人々のおかげで、私はプログラムをある程度機能させましたが、今は何をすべきかわかりません.

コマンドプロンプトコマンドを実行して出力を返す方法は次のとおりです

public static String cmdExec(String cmdLine) {
    String line;
    String output = "";
    try {
        Process p = Runtime.getRuntime().exec(cmdLine);
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = input.readLine()) != null) {
            output += (line + '\n');
        }            
        input.close();           
        }
    catch (Exception ex) {
        ex.printStackTrace();
    }

    return output;
}

それは私が望むように機能しますが、今このメソッドを実行すると、すべてが完了するまで待機してから出力が返されますが、これは私が望むものではありません。

cmdExec メソッドを使用した ping フラッディング メソッドを作成しました。cmdExec() を呼び出す方法は次のとおりです

String[] input = ipTextField.getText().split(":");

    if(input.length == 2) {
        System.out.println(cmdExec("cmd /c ping " + input[0] + " -t -n " + Integer.parseInt(input[1])));

たとえば、プログラムで「127.0.0.1:3」と入力すると、localhost に 3 つのパケットが送信されます。ここでの問題は、コマンド プロンプトからの出力として取得した行を 1 つずつ出力する代わりに、3 つのパケットすべてが送信されるまで待機してから、完全な出力を出力することです。

コマンド プロンプトで「ping 127.0.0.1 -t -n 3」と入力すると、一度にすべてではなく、1 つずつ応答が出力されるので、プログラムで同じことを行うにはどうすればよいでしょうか。

4

2 に答える 2

0

次の方法で連続して印刷できます。

while ((line = input.readLine()) != null) {
    System.out.println(line);
    output += (line + '\n');
}   

(以下は、将来の視聴者にとっては依然として有用ですが、質問に対する適切な回答ではありません。) 出力ストリームから読み取る前にa を挿入するだけです。process.waitFor()このコマンドは、プロセスが終了するまで待機してから続行します。行ごとに読む必要もありません。バッファを一度にダンプするだけです。

これ、または最後の行にのみ出現する文字列 ( MinimumWindows など) を見つけて、while 条件を次のように変更することができます。

while((line == input.readline()).indexOf("Minimum") == -1)

于 2013-04-07T17:43:31.037 に答える