0

友人がpingを実行するために小さなデスクトップアプリを実行していますが、それは「機能します」。ping -t(無限のping用)を使用する予定ですが、私が行った方法では、返されるだけなので、結果は表示されません終了したら、すべてのping結果を「jtextField」に追加するために変更/追加する必要があるもの

私が持っているものを見てください:

ping を実行して結果を返すメソッド (resposta)。

    public String pingar(String ip){  
        String resposta="";  
        String comando="ping -t "+ip;  
        try {  
            Scanner S = new Scanner( Runtime.getRuntime().exec(comando).getInputStream());    
            while(S.hasNextLine()) {    
               resposta+=S.nextLine()+"\n"; 
            }  
        } catch (IOException ex) {  
            ex.printStackTrace();  
        }  
        return resposta;  
    }  

メソッドを使用して上記のメソッドを開始し、メソッド adicionaresultado を使用して結果を追加します(resposta) public void ativaoping() { adicionaresultado((pingar(tfIp.getText()))); }

テキストを変更/追加し、スクロールの位置を最後に設定するメソッド

    public void adicionaresultado(String resposta) { 
        taResultados.append(resposta);
taResultados.setCaretPosition(taResultados.getDocument().getLength());  
        //tfResultado.setText(tfResultado.getText() + "\n" + resposta);
    }
}

しかし、私の問題は、pingが終了したときにのみテキストを返して追加することです。そのため、ping -tを使用することはできません

4

4 に答える 4

1

イベント キューの JTextArea にテキストを追加します。以下のコード例では、非常に初歩的な例を示しています。これにより、ping コマンドからの応答用に JTextArea に新しい行が追加されます。きれいではありませんが、必要なことは行います。また、エンドレス ping を別のランナブルに配置して、後で強制終了し、エグゼキューター内で実行できるようにして、強制終了の方法をより詳細に制御できるようにします。

package test;

import java.awt.EventQueue;
import java.io.IOException;
import java.util.Scanner;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class Pinger {

    /**
     * @param args
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                Pinger pinger = new Pinger();
                JFrame frame = new JFrame();
                JPanel panel = new JPanel();
                frame.setSize(300, 400);
                frame.add(panel);
                JTextArea textArea = new JTextArea();
                panel.add(textArea);
                frame.setVisible(true);
                pinger.executor.execute(pinger.createRunnable("google.com",
                        textArea));
            }
        });

    }

    private Runnable createRunnable(final String ip, final JTextArea area) {
        return new Runnable() {
            public void run() {
                String resposta = "";
                String comando = "ping -t " + ip;

                try {
                    Scanner S = new Scanner(Runtime.getRuntime().exec(comando)
                            .getInputStream());
                    while (S.hasNextLine()) {
                        final String newText = S.nextLine();
                        EventQueue.invokeLater(new Runnable() {
                            public void run() {
                                area.setText(area.getText()
                                        + System.getProperty("line.separator")
                                        + newText);
                            }
                        });

                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }

            }
        };
    }

    Executor executor = Executors.newFixedThreadPool(1);

}
于 2013-09-30T16:16:13.383 に答える
0

これを置き換えます: "ping -t " + ip; この場合: String コマンド = "ping -n 10 " + ip;

于 2014-06-10T17:40:48.380 に答える
0

adicionaResultadoストリームに新しい行があるたびに呼び出します。

while(S.hasNextLine()) {    
    adicionaResultado(S.nextLine()+"\n");
}
于 2013-09-30T15:44:32.917 に答える
0

メソッドは一度しか返せないので、このトリックで十分です

           while(S.hasNextLine()) {    
               System.out.print(S.nextLine()+"\n"); 
            }  
于 2013-09-30T15:45:24.887 に答える