1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Erro ao adicionar arquivdos do txt a um arraylist

Estou desenvolvendo uma aplicação com interface feita pelo Swing. A aplicação tem como por objetivo simular uma rede de computadores na qual irei monitorar usando a implementação InetAddress. Pois bem, criei minha interface, onde o usuário cadastra o nome da máquina e seu IP. O usuário pode cadastrar a quantidade de máquinas que desejar, toda essa informação já está sendo salva no arquivo TXT. Conforme minha classe Monitor:

public class Monitor extends javax.swing.JFrame {

private ArrayList<Computador> computadores;

  //    public ArrayList<Computador> getComputadores() {
  //        return computadores;
  //    }
   //
   //    public void setComputadores(ArrayList<Computador> computadores) {
  //        this.computadores = computadores;
  //    }
/**
 * Creates new form NovoJFrame
 */
public Monitor() {
    initComponents();

    try {
        Scanner s = new Scanner(new FileInputStream("registro.txt"));
        while (s.hasNext()) {
            String var = s.nextLine();
            if (var.equals(" ")) {
                String nome = s.nextLine();
                String ip = s.nextLine();
                computadores.add(new Computador(nome, ip));
            }
        }
        s.close();
    } catch (FileNotFoundException e) {

    };
}


private void btnGravarMouseClicked(java.awt.event.MouseEvent evt) {                                       
    File arq = new File("registro.txt");
    btnGravar.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            // Condição, verifica se os campo estão vazios.
            if (campoNome.getText().equals("")) {

                JOptionPane.showMessageDialog(null,
                        "Adicione um nome ao computador!");
                campoNome.requestFocus();
            } else if (campoIP.getText().equals("")) {
                JOptionPane.showMessageDialog(null,
                        "Adicione um IP!");
                // Fornece o foco ao cursor da caixa de Texto
                campoIP.requestFocus();
            } else {
                // Tratamento de Erros.
                try {
                    FileWriter fw = new FileWriter(arq, true);
                    try (BufferedWriter bw = new BufferedWriter(fw)) {
                        bw.write(campoNome.getText() + " ");
                        bw.write(campoIP.getText() + "\n");
                        bw.flush();
                        bw.close();
                    }
                    campoNome.setText("");
                    campoIP.setText("");
                    // Exibe caixa de Dialogo.
                    JOptionPane.showMessageDialog(null,
                            "Arquivo Gravado com Sucesso!");

                } catch (IOException Erro) {
                    JOptionPane.showMessageDialog(null,
                            "Erro ao Gravar no Arquivo" + Erro);
                }
            }
        }
    });

}                                      

private void btnAbrirMouseClicked(java.awt.event.MouseEvent evt) {                                      
    btnAbrir.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            Computador cp = new Computador(null, null);
            cp.run();

        }
    });
}                                     

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Monitor().setVisible(true);
        }
    });
}


}

Ainda nesta mesma classe ele abre o arquivo TXT e salva as informações no ArrayList computadores;

Agora é aí onde está meu problema, quando eu clicar no botão GERAR, a aplicação é pra pegar todos os IPs que estão no ArrayList e jogar na thread, porem ele não entra no laço que irá fazer isso. Eu coloquei um teste fora do laço e ele executa somente esse teste.

Abaixo está a classe responsável por pegar as informações do array e jogar na thread:

Classe computador

public class Computador extends javax.swing.JPanel implements Runnable {

private String nome;
private String ip;
//private boolean online;

private Thread processo;

/**
 * Creates new form Computador
 */
public Computador(String n, String i) {

    initComponents();

    nome = n;
    ip = i;
    //online = s;

    CampoNome.setText(n);
    CampoIP.setText(i);
    /*if(online) {
        CampoStatus.setText("Online");
    }else{
        CampoStatus.setText("Offline");
    }*/

    processo = new Thread(this);
    processo.start();
}

@Override
public void run() {

    while (true) {
        ArrayList<Computador> computadores = new ArrayList();

        for (int i = 0; i < computadores.size(); i++) {
            String addr = computadores.get(i).ip;

            try {
                if (InetAddress.getByName(addr).isReachable(3000)) {
                    String nome = InetAddress.getByName(addr).getHostName();
                    System.out.println("Host " + nome + " (" + addr + ") ativo!");
                } else {
                    System.out.println("Host " + addr + " inativo!");
                }
            } catch (UnknownHostException ex) {
                Logger.getLogger(Computador.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Computador.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
        System.out.println("Testando");
        try {
            processo.sleep(5000);
        } catch (InterruptedException ex) {
            Logger.getLogger(Computador.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

A cada IP que ele pegar do ArrayList, ele irá executar um computador numa thread e exibir na interface o ícone do computador, o nome dessa máquina, assim como seu IP e seu status porem ele nao consegue se quer pegar as informaçoes do txt.

Alguém pode me ajudar com o desenvolvimento dessa aplicação?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java swing threads ou faça a sua própria pergunta.