Observer nao executando

4 respostas
0

estou fazendo uma gambiarra aqui, nao apareceu rro mais não funcinou

vamos as partes

fiz o observer, ao entrar no frame ele pega o IP do usuario e salva no banco de dados

legal deu certo fiz assim

InetAddress addr = null;
        try {
            addr = InetAddress.getLocalHost();
        } catch (UnknownHostException ex) {
            Logger.getLogger(login.class.getName()).log(Level.SEVERE, null, ex);
        }
         byte[] ip = addr.getAddress();

   
         String sql = "UPDATE usuarios SET conectado = '"+ip+"' WHERE usuario = '"+login+"'";


 try {

            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost/teste", "root", "");
            System.out.println("A conexão foi um sucesso\n");
            Statement stm = conn.createStatement();
         if(user.equals(login)){
             if(pass.equals(senha)){
             if(connected.equals("false")){
                 stm.executeUpdate(sql);
                 [color=red] new canal(login);[/color]
                  setTitle(login);
                  JOptionPane.showMessageDialog(null, "login com sucesso");
                  new gerenciador().setVisible(true);
                  this.setVisible(false);
             }

fez o update se entrou certinho chama o metodo canal e envia o login

o metodo canal faz isso

public canal(String login) {
        this.login = login;
        executaProcesso();
    }

e o executaprocesso inicia a thread ....... atalhando já na thread no run()

Connection conn = null;
        try {
            InetAddress addr = InetAddress.getLocalHost();
            ipAddr = addr.getAddress();
        } catch (UnknownHostException ex) {
            Logger.getLogger(canal.class.getName()).log(Level.SEVERE, null, ex);
        }

        String teste = "select conectado FROM usuarios WHERE usuario= "+login+"'";

        try {

            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost/spiido", "root", "");
            System.out.println("A conexão foi um sucesso\n");
            Statement stm = conn.createStatement();
            ResultSet rs = stm.executeQuery(teste);
           while (rs.next()) {
              if( !teste.equals(ipAddr.toString())){
              notifyObservers();
              setChanged();
           }

ele procura o ip se o ip for diferente ele avisa o observador que por sua vez

public void update(Observable o, Object arg){

         new gerenciador().dispose();
         new login().dispose();
         }
fexa os programas

mas não ta funcionando o que ta errado?

OBS:. ai no codigo o ip ta getAdress mas da errado o comando certo é getHostAddress mas a duvida ainda em questão nao continua a funcionar

4 Respostas

eliangela

Veja se esse tutorial ajuda: http://www.guj.com.br/article.show.logic?id=47

janjan

String teste = “select conectado FROM usuarios WHERE usuario= “+login+”’”;

olha bem não esta faltando uma aspa simples nesse select?
andes da variavel login?

ViniGodoy

Melhor ainda é se usar o PreparedStatement. Aí não corre o risco de esquecer aspas simples, ou de dar pau caso alguém queira colocar um login/senha como tom’s.

0

eliangela ja estava seguindo este tutorial

janjan não fez diferença aqui no caso continuou sem funcionar

if(pass.equals(senha)){             
                 stm.executeUpdate(sql);
                  executaProcesso();  
                  JOptionPane.showMessageDialog(null, "login com sucesso");
                  new gerenciador().setVisible(true);
                  this.setVisible(false);
private void executaProcesso() {
         if(processo==null) { //Instancia a thread SE não existir uma
             processo = new Thread(new canal(this));
             processo.start();
         } else {
             System.out.println("O processo ainda está em execução");
         }
     }
public void run() {

         Connection conn = null;
        try {
            InetAddress addr = InetAddress.getLocalHost();
            ipAddr = addr.getHostAddress();
            System.out.println(login);
            System.out.println(ipAddr.toString());
        } catch (UnknownHostException ex) {
            Logger.getLogger(canal.class.getName()).log(Level.SEVERE, null, ex);
        }

        String teste = "select conectado FROM usuarios WHERE usuario= '"+login+"'";


        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost/teste", "root", "");
            System.out.println("A conexão foi um sucesso\n");
            Statement stm = conn.createStatement();
            ResultSet rs = stm.executeQuery(teste);
           while (rs.next()) {
              String novoip = rs.getString("conectado");
              System.out.println(novoip);
              if( !novoip.equals(ipAddr.toString())){
              notifyObservers();
              setChanged();
           }

        }} catch(ClassNotFoundException e) {
            System.out.println("excessão Classe não encontrada");
            e.printStackTrace();
        } catch(SQLException e) {
            System.out.println("SQL Exception... Erro na consulta:");
            e.printStackTrace();
        } finally {
            try {
                conn.close();
                System.out.println("\n\nFechamendo a conexão");
            } catch(SQLException erro) {
                System.out.println("Erro no fechamento");
                erro.printStackTrace();
            }
        }

        
         //Notifica fim do processo  
          
     }




}

bem uma diferença que tem do tutorial que a eliangela passou pra esse que não tem o metodo for.... mas como isso é um observer que duraria todo o tempo do prorama acho que não poderia criar um for

Criado 24 de janeiro de 2010
Ultima resposta 25 de jan. de 2010
Respostas 4
Participantes 4