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?