Как захватить результаты iperf непрерывно, используя exec() в Java?
Я хочу захватить результаты программы IPerf3 и отправить их в графический интерфейс JAVA swing, и представить их в виде диаграммы.
Но я воспринял это как серьезную проблему.
Есть фрагмент кода, который я когда-либо использовал.
process = Runtime.getRuntime().exec(command);
// read in the output from Iperf
input = new BufferedReader(new InputStreamReader(process.getInputStream()));
errors = new BufferedReader(new InputStreamReader(process.getErrorStream()));
Thread t = new Thread(){
public synchronized void run(){
String input_line = null;
try{
while (input != null && (input_line = input.readLine()) != null && !input_line.equals(""))
{
// System.out.println("getting msg now ...");
parseLine(input_line);
frame.logMessage(input_line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
t.start();
И вот пример команды: "iperf3 -f M -i 1 -c iperf.he.net -p 5201 -P 1 -t 10".
Как вы знаете, этот сервис iperf3 отправляет данные клиенту (или серверу) по временному интервалу (здесь, одна секунда), поэтому, когда я получаю один результат в секунду, я хочу отправить в GUI (здесь parseLine() делает это) как только я получу результат.
Но parseLine() внутри оператора while из Thread.run() выполняется, когда получены все 10 результатов, другими словами, когда служба iperf3 закончила работу.
У меня есть сомнения, что есть проблема в использовании
BufferedReader
для ввода строки.
Теперь у меня возникла проблема с этим вопросом, и я хочу, чтобы разработчики, которые имеют богатый опыт работы с java и iperf, действительно помогли мне.
Заранее спасибо.