O código abaixo server para utilizar o ping do próprio sistema operacional e escreve-lo em JTextArea. Ele deve escrever de maneira que o tempo de espera do ping seja perceptivel.
O método ping está totalmente correto, tanto que se eu coloca-lo diretamente no construtor ele funciona corretamente, mas se eu coloca-lo em algum evento não funciona da maneira esperada.
Tentem executar esse código com o metodo “ping” no construtor e depois no evento para vocês perceberem bem o que estou tentando explicar e me mandem uma solução por favor. Só sei que tenho que alterar alguma coisa no evento, mas o que?
import javax.swing.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
public class Comandos implements ActionListener {
private static JDialog d;
private static JTextArea texto;
private static JButton b;
private static void ping(String destino, JTextArea alvo, int quant) {
try {
Process p = Runtime.getRuntime().exec("ping " + destino );
BufferedReader out = new BufferedReader(new InputStreamReader(p.getInputStream()));
String s = null;
do {
s = null;
s = out.readLine();
if ( (s != null) && (s.length() > 0) ) alvo.setText(alvo.getText() + s + "\n");
} while (s != null);
} catch(IOException io){}
}
public Comandos() {
d = new JDialog();
texto = new JTextArea();
b = new JButton("ping");
texto.setEditable(false);
texto.setBounds(0, 0, 400, 400);
b.setBounds(200, 510, 100, 40);
b.addActionListener(this);
Container c = d.getContentPane();
c.setLayout(null);
c.add(b);
c.add(texto);
d.setResizable(false);
d.setSize(800, 600);
d.setLocationRelativeTo(null);
d.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
d.setVisible(true);
//ping("10.203.1.1", texto, 4);
}
public void actionPerformed( ActionEvent e ) {
ping("10.203.1.1", texto, 4);
}
public static void main(String args[]) {
new Comandos();
}
}