Witam
Eksperymentuje trochę z wywoływaniem poleceń windowsowych spod Javy i mam taki problem z poleceniem ping.
Wywołuje te polecenie w następujący sposób:
Metoda:
public void Pingt (String AdresTmp) throws IOException{
String TMP = "";
Process ping = r.exec("ping -n 1 "+AdresTmp);
String PingResult = "";
try (BufferedReader in = new BufferedReader (new InputStreamReader (ping.getInputStream()))){
String inputPing;
while ((inputPing = in.readLine()) != null){
TMP += inputPing+"\n";
if (inputPing.contains("Minimum")){
char czas10, czas11, czas12;
String tmp;
czas10 = inputPing.charAt(13);
czas11 = inputPing.charAt(14);
czas12 = inputPing.charAt(15);
tmp = Character.toString(czas10)+Character.toString(czas11)+Character.toString(czas12);
wynik.insert("Czas Odpowiedzi: "+tmp+" ms\n", 0);
}
if (inputPing.contains("Host docelowy jest")){
wynik.insert("Host docelowy jest nieosągalny, \nwpisz ponownie poprawny adres IP \n", 0);
}
}
}
}
Oraz wywołanie za pomocą Buttona:
String AdresTmp;
AdresTmp=adres.getText();
String IloscZapytan;
IloscZapytan = n.getText();
int IntIloscZapytan = 0;
try {
IntIloscZapytan = Integer.parseInt(IloscZapytan);
} catch (Exception ex) {
wynik.insert("Błąd - wprowadź ilość zapytań większą od zera\n", 0);
}
for (int i = IntIloscZapytan; i>0; i--){
try {
Pingt(AdresTmp);
} catch (IOException ex) {
Logger.getLogger(oknoglowne.class.getName()).log(Level.SEVERE, null, ex);
wynik.insert("Podano niepoprawny adres IP", 1);
} catch (Exception Ex){
wynik.insert("Nieoczekiwany Błąd", 0);
}
}
Obecnie program działa tak, że podaje adres IP do pingowania oraz liczbę obiegów polecenia ping. Metoda Ping jest wywoływana w pętli for, więc wydawało mi się, że program powinien wykonać pinga określonego hosta, wypisać czas odpowiedzi, a następnie wykonać polecenie ponownie, tak długo, aż i nie będzie 0;
Jednak jeżeli wpiszę adres IP i wpiszę 100 powtórzeń, to program zamiast wyświetlać opóźnienie po każdym wykonaniu pętli for, to przestaje odpowiadać na jakieś 15 sekund, a następnie wyświetla wszystkie 100 czasów na raz. Chciałbym, żeby działało to jak polecenie ping -t w dosowskiej konsoli, ponieważ w efekcie chciałbym uzyskać program, który będzie pingował jakiegoś hosta w określonej pętli, a następnie z czasów opóźnienia tworzył mi wykres, w czasie rzeczywistym lub w na żądanie. Co prawda do tworzenia wykresu jeszcze nie doszedłem, bo przy obecnym wykonywaniu programu jak dam mu jakiś adres i na przykład i 5000 zapytań to sobie mogę iść na obiad z deserem czekając na wyniki. Chciałbym, żeby wykonywało się to w czasie rzeczywistym.
Jeszcze pytanie poza konkursem. Jak zrobić, żeby za pomocą jakiegoś buttona przerwać wykonywanie polecenia rountime? Na przykład wywołuje Runtime ping -t www.onet.pl w tym moim okienku pojawiają mi się na bieżąco czasy opóźnienia, a jak mi się znudzi to jakimś buttonem chciałbym zkillować proces ping -t.