Foros del Web » Programación para mayores de 30 ;) » Java »

error boton conectar/desconectar

Estas en el tema de error boton conectar/desconectar en el foro de Java en Foros del Web. Hola , tengo la siguiente dudilla. tengo un programa que es un servidor y que tiene el tipico boton de conectar desconectar. Pues bien esto ...
  #1 (permalink)  
Antiguo 08/06/2009, 10:23
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
error boton conectar/desconectar

Hola , tengo la siguiente dudilla.

tengo un programa que es un servidor y que tiene el tipico boton de conectar desconectar.

Pues bien esto es lo que tengo en ese boton

Código:
jButton1.setText("Desconectar Servidor");
    
    if(jButton1.equals("Desconectar Servidor"))
        {
               jlista.setModel(modelo);
               jlogger.setModel(modelo2);

               try {

               // System.out.println("asdasdasd");
                System.out.println("Cadencia: "+s.cadencia);
                s = new Servidor(modelo,modelo2);
                rc =new resetcomprueba(s,jlista,s.cadencia,modelo2);
                estado.setText("El servidor esta activado");
                jlista.setCellRenderer(new Colores(s));
                t.start(); 
                rct.start();                       

               } 
               catch (IOException ex1) 
                   {
                    Logger.getLogger(Servidor_Grafico.class.getName()).logLevel.SEVERE, null, ex1);
                    modelo2.addElement(ex1+"   Error en la I/O");

                   }

        }
    
    else{
              t.destroy();
              rct.destroy();

              jButton1.setText("Conectar Servidor");
        } 
}
Vale hago esto y me da el siguiente error:

"Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError".

Que puede pasar??.Lo que quiero que haga el boton es que cuando se pulse , es decir, cuando se ponga el texto "desconectar servidor" (por que ya habré pulsado el servidor) me haga lo que dice el boton y si no que para el hilo.

esto es lo que tengo como atributo de la clase (fuera del boton)

Thread t=new Thread(s,"servidor");
Thread rct=new Thread (rc,"Resetcomprueba");
  #2 (permalink)  
Antiguo 08/06/2009, 13:52
(Desactivado)
 
Fecha de Ingreso: abril-2009
Mensajes: 113
Antigüedad: 15 años
Puntos: 1
Respuesta: error boton conectar/desconectar

Cita:
Que puede pasar??.Lo que quiero que haga el boton es que cuando se pulse , es decir, cuando se ponga el texto "desconectar servidor"
Hola. No entiendo esto. Podrias explicarlo un poco mejor. (No es java, pero... que es JavaScript, JSP.. es que de esos temas no sé nada).
  #3 (permalink)  
Antiguo 08/06/2009, 14:25
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: error boton conectar/desconectar

es Java y lo que quiero hacer es que cuando se pulse un boton "conectar" haga lo que tenga que hacer el programa y cuando se vuelva a pulsar ese boton que ahora se llama "desconectar" se paren los hilos o procesos creados y que lanzan las diferentes partes del programa.
  #4 (permalink)  
Antiguo 08/06/2009, 14:29
 
Fecha de Ingreso: noviembre-2008
Mensajes: 115
Antigüedad: 15 años, 6 meses
Puntos: 4
Respuesta: error boton conectar/desconectar

No se si tendras algun error mas, pero lo que si creo que esta mal, es que estas comparando el objeto boton con un texto (fijate en la segunda linea, jButton1.equals....) cuando lo que quieres comparar es el texto que hay en ese boton. Es decir, jButton1.getText().equals.....

Espero que te sirva.
  #5 (permalink)  
Antiguo 08/06/2009, 14:31
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: error boton conectar/desconectar

Cita:
Iniciado por jesuscoro Ver Mensaje
No se si tendras algun error mas, pero lo que si creo que esta mal, es que estas comparando el objeto boton con un texto (fijate en la segunda linea, jButton1.equals....) cuando lo que quieres comparar es el texto que hay en ese boton. Es decir, jButton1.getText().equals.....

Espero que te sirva.
Eso ya lo he corregido en cuanto puse el codigo aqui.
No se que mas puede pasar, no me deja lanzar los hilos que necesito, ni tampoco parrarlos
  #6 (permalink)  
Antiguo 08/06/2009, 14:39
 
Fecha de Ingreso: noviembre-2008
Mensajes: 115
Antigüedad: 15 años, 6 meses
Puntos: 4
Respuesta: error boton conectar/desconectar

A ver si encuentras inspiracion con esto
  #7 (permalink)  
Antiguo 15/06/2009, 10:05
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: error boton conectar/desconectar

Vale esto ya lo solucioné parandolos manualmente con una variable booleana que la pongo en un metodo a false

Este error me surgía por que no me encontraba el metodo stop. Es un metodo no fiable.

Ahora el problema que tengo es que si , se para el programa , pero no arranca de nuevo cuando le doy a "conectar Servidor"

Tengo esto.

Código:
if(jButton1.getText().equals("Conectar Servidor"))
      {        jButton1.setText("Desconectar Servidor");
               jlista.setModel(modelo);
               jlogger.setModel(modelo2);

                try {
                        s = new Servidor(modelo,modelo2);
                    } 
                   catch (IOException ex1) 
                    {
                        Logger.getLogger(Servidor_Grafico.class.getName()).log(Level.SEVERE, null, ex1);
                        modelo2.addElement("Error en la salida o entrada del servidor");

                    }
                System.out.println("Cadencia: "+s.cadencia);
                rc =new resetcomprueba(s,jlista,s.cadencia,modelo2);
               Thread t=new Thread(s,"servidor");
                Thread rct=new Thread (rc,"Resetcomprueba");
                estado.setText("El servidor esta activado");
                jButton1.setText("Desconectar Servidor");
                jlista.setCellRenderer(new Colores(s));
                t.start(); 
                rct.start();
               System.out.println("LANZO LOS 2 HILOS");
    
    }
    
   else{     
           

                    if(jButton1.getText().equals("Desconectar Servidor"))
                    {
                try {

                    System.out.println("TAMBIEN LOS PARO");
                     rc.parar();
                     s.martarhilo();
                              
                    rct.join();
                    t.join();
                    jButton1.setText("Conectar Servidor");
                } catch (InterruptedException ex) {
                    Logger.getLogger(Servidor_Grafico.class.getName()).log(Level.SEVERE, null, ex);
                }
              
                    }
            
   }

y de atributos de la clase tengo lo sigueente:

Thread t=new Thread(s,"servidor");
Thread rct=new Thread (rc,"Resetcomprueba");


No se por que falla, por que al ponerlos como atributos de la clase....

he probado tambien a quitar

Thread t=new Thread(s,"servidor");
Thread rct=new Thread (rc,"Resetcomprueba");

estas 2 lineas de lo que es la definicion del boton dejando solo las de la clase ,pero nada.

¿Que estoy haciendo mal? por qeu me sale una excepcion "SOCKET EXCEPTION"
  #8 (permalink)  
Antiguo 15/06/2009, 12:21
 
Fecha de Ingreso: noviembre-2008
Mensajes: 115
Antigüedad: 15 años, 6 meses
Puntos: 4
Respuesta: error boton conectar/desconectar

En que linea te salta la excepcion? Que hace los metodos parar() y matarHilo()? Puedes poner la traza del error? Y si se te ocurre algo mas que pueda ayudar, pues tambien. Cuanta mas informacion, mejor.
  #9 (permalink)  
Antiguo 15/06/2009, 13:59
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: error boton conectar/desconectar

1º---los metodos matarhilo() y parar() hcen esto

Boolean terminar=false;


2º--- La excepcion la tengo aqui.

----------------clase servidor---------------------

Código:
 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package proyecto.copia;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import javax.swing.DefaultListModel;
import javax.swing.JList;

/**
 *
 * @author pc1
 */
public class Servidor implements Runnable{

    
   int puertoServidor;
   int tamanoBuffer=4;
   DatagramSocket ds;
   byte buffer[] = new byte[tamanoBuffer];
   int tamarrayips=10;
   short [] compruebaips=new short[tamarrayips];
   String [] arrayips = new String[tamarrayips];
   int i=0;
   public int cadencia;
   JList jlogger = new JList();
   DefaultListModel modelo;
   DefaultListModel modelo2;
   javax.swing.JTextField estado;
   ArrayList cadenas = new ArrayList();
   boolean parar=true;
   
   
public Servidor(DefaultListModel mod,DefaultListModel mod2) throws IOException{
    modelo=mod;
    modelo2=mod2;
  
//------------------CONSTUCTOR Y LECTURA DE FICHEROS-----------------------    
    
       try{  
             leofichero();
          }
        catch(FileNotFoundException ex3)
        { 
             modelo2.addElement("El fichero no se encuentra,se creara otro archivo");
                try
                {
                    FileWriter fichero = new FileWriter("config_server.conf");
                    PrintWriter pw = new PrintWriter(fichero);
                    
                    pw.write("1998\n");
                    pw.write("3000");
                     
                    pw.close();
                    leofichero();                  
                }
                catch (Exception ex4)
                {  
                    ex4.printStackTrace();
                }
            
                       
        }
}

//------------------CODIFICACIÓN DEL PROGRAMA----------------

    public void run() {
        try {     
               ds = new DatagramSocket(puertoServidor);
               DatagramPacket p = new DatagramPacket(buffer, buffer.length);             
               ds.setSoTimeout(10000);
              
               while(parar)
                   {       try
                           {      
                                      ds.receive(p);//recibe el paquete
                                      int existe=0;
                                      for(int i=0;i<modelo.getSize();i++){
                                          if(modelo.elementAt(i).equals(p.getAddress().toString())){
                                            existe=1; 
                                            setComprueba(i,(short)0);
                                             log(p,buffer);  
                                          }
                                      }
                                      if(existe==0){
                                          anadirPC(p.getAddress().toString());
                                          //setComprueba(i,(short)0);
                                          log(p,buffer); 
                                      }
                                      
                            }
                            catch(SocketTimeoutException ex5)
                            {
                              modelo2.addElement("Tiempo de espera agotado.");
                            }
                    }
                    
             }
        catch(SocketException ex6)
        {
            modelo2.addElement("Se ha producido error en el socket"); 
            
        }
        catch (UnknownHostException ex7)
        {
            modelo2.addElement("Error host desconocido");
        }
        catch(IOException ex8){
            modelo2.addElement("Error en la I/O");
        }
    }
   
    //---------------METODOS-----------------
   
    public void log(DatagramPacket paquete,byte buf[])
    {              
            modelo2.addElement("--------SIRVIENDO PETICION--------");
            modelo2.addElement("CLIENTE: "+paquete.getAddress().toString());
            modelo2.addElement("PUERTO: "+paquete.getPort());
            modelo2.addElement("---------CONTENIDO DEL PAQUETE---------");
              for(int ac=0;ac<buf.length;ac++)
                 {
                    modelo2.addElement(buf[ac]);
                 }
      
       
    }
      
    public void lecfich(ArrayList cadenas)
    {
     modelo2.addElement("Se ha cargado un fichero de configuracion"); 
     modelo2.addElement("Asegurese de que coinciden el puerto");
     modelo2.addElement("Contenido fichero: "+cadenas.get(0)+","+cadenas.get(1));
     modelo2.addElement("");
    }
                   
    
    public void anadirPC(String ip){
            modelo.addElement(ip);    
            arrayips[i]=ip; 
            setComprueba(i,(short)0);
            
            i++; 
            if(i >= tamarrayips){ //doblar el tamaño de los arrays
                 tamarrayips*=2;
                 String aux[]=new String[tamarrayips];
                 short aux2[]=new short[tamarrayips];
                 for(int i=0;i<arrayips.length;i++){
                     aux[i]=arrayips[i];
                     aux2[i]=compruebaips[i];
                 }
                 arrayips=aux;
                 compruebaips=aux2;
            }
    
    }
    
    public synchronized void setComprueba(int elem,short valor){
        compruebaips[elem]=valor;
    }
    public short getComprueba(int elem){
        return compruebaips[elem];
    }
    public int sizeComprueba(){
        return i;
    }
  
    public void leofichero() throws FileNotFoundException, IOException
    {
         //----------------CODIFICACION ARCHIVOS CONFIGURACION---------- 
        
                    File archivo = null;
                    FileReader fr = null;
                   
                    archivo = new File ("config_server.conf");
                    fr = new FileReader (archivo);
                    BufferedReader br = new BufferedReader(fr);
                    String linea;
                    

                    while((linea=br.readLine())!=null)
                    {  
                        System.out.println(linea);
                        cadenas.add(linea);
                        
                        
                    }
                    
                     lecfich(cadenas);
                     
                                        
                    puertoServidor= Integer.parseInt((String) cadenas.get(0));
                    cadencia= Integer.parseInt((String) cadenas.get(1));
                   if( fr != null)
                   fr.close(); 
                    
    }
   
    public void martarhilo(){
        parar=false;
    }
    
}
--------------------clase resetcomprueba------------------

Código:
public class resetcomprueba implements Runnable{
     
     Servidor s;
     JList jlista=new JList();
     int cadencia;
     boolean marcha=true;
     DefaultListModel modelo2;
   
     public resetcomprueba(Servidor sx,JList jlista2,int caden,DefaultListModel mod2) {
         s=sx;
        jlista=jlista2;
        cadencia=caden;
        modelo2=mod2;
    }

     public void parar(){
         marcha=false;
     }
    
    public void run() {
                    
            
     try {
        while (marcha)
                {
                     for(int a=0;a<s.sizeComprueba();a++)
                          {
                              s.setComprueba(a,(short)1);
                             
                          }
                   
                     Thread.sleep(cadencia);
                    
                                        
                     jlista.repaint();
                     Thread.sleep(cadencia);

                }
   } catch (InterruptedException ex9) {
               
       Logger.getLogger(resetcomprueba.class.getName()).log(Level.SEVERE, null, ex9);
       modelo2.addElement(ex9);
            }

   }
}

3º Una cosa que me ha dicho un amigo es que me falta crear los hilos de nuevo cuando se pulse por segunda vez "conectar Servidor". Y que eso lo haga en los atributos de la clase, que pusiera esto t=new Thread(); pero esto ya lo hago creandolos como atributos de la clase.

¿tiene que ver esto algo?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:18.