JAVA Как добавить список и TableView проблемы в Java? - PullRequest
0 голосов
/ 03 октября 2018

Я новичок в кодировании Java, изучении iam и обучении. Я предлагаю создать программу traceroute, которая будет продолжать тестировать отклик ping на трассируемом маршруте.

Первый шаг - получить IP от пользователя и сделатьtraceroute получает все ip-адреса для проверки связи, но я застрял на этом, когда я пытаюсь добавить анализируемый возврат вывода traceroute в Jtable, он не накапливает его, просто добавьте последнюю запись моего while.

Пожалуйста, не вините меня в плохом кодировании, я учусь.

Я пытаюсь выяснить, как добавить данные в список и JTable на некоторое время.

Эта программа получает информацию отдругой класс, этот другой класс запускает трассировку по IP-адресу и возвращает в Main результаты трассировки в следующем формате:

13мс; 14мс; 23мс; 192.168.2.3
13мс; 14мс; 23мс; 192.168.2.1
13мс; 14мс; 23мс; 200.122.222.22

это мои поля таблицы: ping1, ping2, ping3, hop

Мне нужно поместить эти данные в таблицуно должны быть все ips из спискано я получаю только последний.

Я сделал много тестов и прокомментировал это, потому что не работал.

Main.java

package application;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import application.Main.Pinge;
import application.NetworkDiagnostics;
import javafx.application.Application;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;

import java.util.Arrays;
import java.util.List;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;

public class Main extends Application {
@Override
    public void start(Stage primaryStage) {
        try {

            // Layout
            FlowPane noRaiz = new FlowPane();
            // Cena
            Scene minhaCena = new Scene(noRaiz, 400, 500);

            // Nós
            TextField ip = new TextField();

            // Tables
    //  List lista = new ArrayList<String>();       
    //  lista.add("1;2;3;4");
//      List<Pinge> lista = Arrays.asList();
    //  List<Pinge> lista = Arrays.asList(
    //          new Pinge("OK","OK","OK","OK")
    //          );

        TableView<Pinge> tabela = new TableView<>();
        TableColumn colunahop = new TableColumn<>("Hop");
        TableColumn colunaping1 = new TableColumn<>("Ping1");
        TableColumn colunaping2 = new TableColumn<>("Ping2");
        TableColumn colunaping3 = new TableColumn<>("Ping3");

        colunahop.setCellValueFactory(new PropertyValueFactory<>("hop"));
        colunaping1.setCellValueFactory(new PropertyValueFactory<>("ping1"));
        colunaping2.setCellValueFactory(new PropertyValueFactory<>("ping2"));
        colunaping3.setCellValueFactory(new PropertyValueFactory<>("ping3"));

        tabela.getColumns().addAll(colunahop, colunaping1, colunaping2, colunaping3);


        Button vai = new Button();
        vai.setText("vai");

        Label texto = new Label();
        texto.setText("");

        TextArea resultadow = new TextArea();

        // Adicionar elementos na cena
        noRaiz.getChildren().add(ip);
        noRaiz.getChildren().add(vai);
        noRaiz.getChildren().add(texto);
        noRaiz.getChildren().add(tabela);
    //  noRaiz.getChildren().add(resultadow);


        vai.addEventHandler(ActionEvent.ACTION, new EventHandler<ActionEvent>() {
            @SuppressWarnings("null")
            @Override

            public void handle(ActionEvent envent) {
                String resultado = new String();
                ip.setText("registro.br");
                vai.setFocusTraversable(true);
                texto.setText("Rastreando: " +  ip.getText());
                resultadow.setText("Rastreando: " +  ip.getText());
                resultado = application.NetworkDiagnostics.traceRoute(ip.getText());
        //      tabela.getItems().add(lista);
                String[] result = resultado.split("\n");
                String payload = null;
            //  lista.add(resultado);
                int x1 = 0;

            //  lista.add(lista.lastIndexOf(lista)+1, new Pinge("TESTE","TESTE","TESTE","TESTE"));
                List<Pinge> lista = null;
                while (x1 < result.length) {
                    System.out.println(x1 + ": " + result[x1]);
                    String[] result1 = result[x1].split(";");
                //  payload = payload + result1[3] + ":" + result1[0] + ":" + result1[1] + ":" + result1[2] + "\n";
                    lista = Arrays.asList(new Pinge(result1[3],result1[0],result1[1],result1[2]));
                //  lista.add(new Pinge(result1[3],result1[0],result1[1],result1[2]));
                    resultadow.appendText(result1[3] + ":" + result1[0] + ":" + result1[1] + ":" + result1[2] + "\n");

                //resultadow.setText(result[x1]);   
                x1++;
                }

                //List<Pinge> lista = Arrays.asList(new Pinge("TESTE","TESTE","TESTE","TESTE"));
                tabela.setItems(FXCollections.observableArrayList(lista));
            }
        });

        primaryStage.setScene(minhaCena);
        primaryStage.show();
    } catch(Exception e) {
        e.printStackTrace();
    }

}


public static class Pinge {

    private String hop;
    private String ping1;
    private String ping2;
    private String ping3;

    public Pinge(String hop, String ping1, String ping2, String ping3) {
        this.hop = hop;
        this.ping1 = ping1;
        this.ping2 = ping2;
        this.ping3 = ping3; 
        }

    public String getHop() {
        return hop;
    }

    public void setHop(String hop) {
        this.hop = hop;
    }

public String getPing1() {
    return ping1;
}

public void setPing1(String ping1) {
    this.ping1 = ping1;
}

public String getPing2() {
    return ping2;
}

public void setPing2(String ping2) {
    this.ping2 = ping2;
}

public String getPing3() {
    return ping3;
}

 public void setPing3(String ping3) {
     this.ping3 = ping3;
 }
    }

public static void main(String[] args) {
    launch(args);
}
}

Это класс, гдевыполните команду tracert

NetworkDiagnostics.java

package application;

import java.io.BufferedWriter;
import application.Main;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.InetAddress;
import java.util.Arrays;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NetworkDiagnostics {


static String convertStreamToString(java.io.InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}

private final String os = System.getProperty("os.name").toLowerCase();

public static String traceRoute(String string) {
    String route = "";
    String res = "";
    int ms = 0;
    File arquivo = new File("c:/pedro/tracert.log");

    try {
        Process traceRt;
        traceRt = Runtime.getRuntime().exec("tracert " + string);

        // read the output from the command
        route = convertStreamToString(traceRt.getInputStream());
        route = route.trim().replaceAll("    ", " ").replaceAll("  ", " ").replaceAll(" ms", "ms").replaceAll(" ", ",");
        String[] split = route.trim().split("\n");

        //regex ip and domain
        String IPADDRESS_PATTERN = "(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
        String DOMAIN_PATTERN = "^(www\\.|)(([a-zA-Z0-9])+\\.){1,4}[a-z]+$";
        Pattern patternIP = Pattern.compile(IPADDRESS_PATTERN);
    //  Pattern patternDo = Pattern.compile(DOMAIN_PATTERN);

        int x = 1;

        while (x < split.length) {
            // debug
            System.out.println(split[x]);
            int y = 0;
            String[] details = split[x].split(",");
            while (y < details.length) {
                Matcher matcherIP = patternIP.matcher(details[y]);
            //  Matcher matcherDO = patternDo.matcher(details[y]);
                if (details[y].contains("ms"))
                {
                    res = res + details[y] + ";";
                }
                if (matcherIP.find()) {
                        res = res + matcherIP.group() + "\n";
                    }

                y++;
            }

            x++;
        }

        convertStreamToString(traceRt.getErrorStream());

    } catch (IOException e) {

    }

    try {

        if (!arquivo.exists()) {
            // cria um arquivo (vazio)
            arquivo.createNewFile();
        }

        // caso seja um diretório, é possível listar seus arquivos e diretórios
        File[] arquivos = arquivo.listFiles();

        // escreve no arquivo
        FileWriter fw = new FileWriter(arquivo, true);

        BufferedWriter bw = new BufferedWriter(fw);

        bw.write(route.replaceAll("\\s", " "));

        bw.newLine();

        bw.close();
        fw.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }

    return res;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...