Java - unreachable statement

 
Vista:

unreachable statement

Publicado por lilu (112 intervenciones) el 05/01/2007 17:26:08
Buenas tardes.... este error me sale cuando quiero cerrar lo que es la coneccion con la
base de datos, el Statement y los DataInputStream y DataOutputStream...

ERROR:
unreachable statement

ESTE ES EL PEDAZO DE CODIGO:... creo yo que es por el catch...
try{
while(true)
{
numX = recibir.readFloat();
numZ = recibir.readFloat();
result = stmt.executeQuery("SELECT origenX,origenZ,destinoX,destinoZ FROM area");
while(result.next())
{
eskinaOX = (float)result.getDouble("origenX");
eskinaOZ = (float)result.getDouble("origenZ");
eskinaDX = (float)result.getDouble("destinoX");
eskinaDZ = (float)result.getDouble("destinoZ");
if(eskinaOX<=numX && eskinaDX>=numX && eskinaOZ<=numZ && eskinaDZ>=numZ)
{
System.out.println ("entro en el servidor");
ox = eskinaOX;
oz = eskinaOZ;
dx = eskinaDX;
dz = eskinaDZ;

enviar.writeFloat(ox);
enviar.writeFloat(oz);
enviar.writeFloat(dx);
enviar.writeFloat(dz);
band = 1;
}
else if(band == 0)
{
enviar.writeFloat(ox);
enviar.writeFloat(oz);
enviar.writeFloat(dx);
enviar.writeFloat(dz);
}
}
band = 0;
}
//System.out.println("Transmision terminada. Cerrada socket.");
enviar.close();
recibir.close();
stmt.close();
con.close();

} catch(SQLException ex) {System.err.println("SQLException: " + ex.getMessage());}
catch(IOException e){e.printStackTrace();System.exit(-1);}

Un catch es para la coneccion con la base de datos y el otro es por los input y output (enviar y recibir)... No me deja hacer close() a nada que este dentro de esos catch, si los pongo en comentario no me da ningun problema, aunque me sale esta exception pero al final:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.net.SocketInputStream.read(SocketInputStream.java:182)
at java.io.DataInputStream.readInt(DataInputStream.java:370)
at java.io.DataInputStream.readFloat(DataInputStream.java:429)
at Server.runServer(Server.java:111)
at Server.<init>(Server.java:35)
at Server.main(Server.java:163)

CUAL ES EL PROBLEMA ALLI??

POR FAVOR Y GRACIAS!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:unreachable statement

Publicado por luis (88 intervenciones) el 05/01/2007 21:56:40
exactamente es dentro del catch lo que pasa es que las variables que esten dentro del try no las puedes usar dentro del catch
puedes hacer:
a: meter un try y catch dentro del while que maneje la conexion a la base de datos y hacer otro try/catch para el input/output streams o

b:desde el metodo que estes ejecutando esta parte del codigo (me imagino que es una aplicacion y estas dentro de main) poner que arroje IOException y ya no tienes que manejar las excepciones con los metodos de IO
public static void main (String[] args) throws IOException
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:unreachable statement

Publicado por lilu (112 intervenciones) el 06/01/2007 17:38:53
GRACIAS MI CORAZON!!!... YA HABIA PROBADO ENCERRAR EN TRY/CATCH PERO CREO QUE LO HICE MAL.....

GRACIAS!!!.... ;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:unreachable statement

Publicado por Gonzalo (1 intervención) el 06/01/2007 00:04:21
El problema es que, quitando las cosas que no nos interesan, lo que tienes es más o menos esto:

try{
while(true) { // bucle infinito
// ...
}
conexion.close();
} catch(Exception ex) {
// ...
}

El bucle while(true) se ejecuta infinitamente. La única forma de salir de ese bucle es que ocurra una excepción.
Pero si ocurre, no sale simplemente del bucle, sino que se va al catch(Exception ex). Así que el código que tienes después del bucle, la instrucción de conexion.close() no puede llegar a ejecutarse nunca.

Por eso el compilador te da un error de Unreachable Statement, es decir que esas instrucciones nunca se ejecutan porque no se puede llegar a ellas nunca.

Por otra parte, si no pones esas instrucciones, la conexión nunca se cierra. La solución sería algo como:

try{
while(true) {
// bucle infinito
// ...
}
} catch(Exception ex) {
if (conexion != null) conexion.close();
// ...
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:unreachable statement

Publicado por neossoftware (622 intervenciones) el 06/01/2007 01:26:32
Muy biena explicacion estoy deacuerdo contigo ;)

Saludos comunidad Open Source.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:unreachable statement

Publicado por lilu (112 intervenciones) el 06/01/2007 17:40:10
OK... entiendo hare la prueba...

GRACIAS MI CIELO!!!..... ;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:unreachable statement

Publicado por lilu (112 intervenciones) el 06/01/2007 20:40:07
try{
while(true)
{
...................
}

//stmt.close();
//con.close(); //coneccion con la base de datos (Connection con)

} catch(SQLException ex) {System.err.println("SQLException: " + ex.getMessage());}
catch(IOException e){
if(connection!=null)connection.close(); //cerrando socket
e.printStackTrace();
System.exit(-1);
}

Ok... si hago lo que me indicaste, me sale este error:
unreported exception java.io.IOException; must be caught or declared to be thrown

Ahora tu te referias para cerrar solo el socket??..... y la base de datos? o sea el "con"?, si hago lo mismo con la base de datos, o sea con.close() me va a salir el mismo error, verdad!!??.....que hago con el catch SQLException??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:unreachable statement

Publicado por luis (88 intervenciones) el 08/01/2007 19:09:23
mira yo meteria la IOException en el metodo entero como te lo explique anteriormente ya para que solo te preocupes por manejar la SQLException que es la que nos interesa mas:

public tuMetodo () throws IOException
{
try{
while(true)
{
...................
}

//stmt.close();
//con.close(); //coneccion con la base de datos (Connection con)

} catch(SQLException ex) {System.err.println("SQLException: " + ex.getMessage());}
catch(IOException e){
if(connection!=null)connection.close(); //cerrando socket
e.printStackTrace();
System.exit(-1);
}

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar