Ver Mensaje Individual
  #9 (permalink)  
Antiguo 15/06/2009, 13:59
Juny18
 
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?