Ver Mensaje Individual
  #8 (permalink)  
Antiguo 22/04/2009, 01:44
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ayudita con error en programa java

El problema (quito el código que no es relevante para la explicación):

Código java:
Ver original
  1. public class TecladoA {
  2.     public static void main(String[] args){  /* INICIO BLOQUE FUNCION MAIN */
  3.         // ...
  4.         try{ /* INICIO BLOQUE TRY 1 */
  5.             Connection conexion = DriverManager.getConnection("jdbc:odbc:curso1","jd bc","jdbc");
  6.             // ...
  7.             InputStreamReader entrada = new InputStreamReader(System.in);
  8.             BufferedReader teclado = new BufferedReader(entrada);
  9.             // ...
  10.         }catch(IOException e){
  11.             System.out.println(e.getMessage());
  12.         } /* FIN BLOQUE TRY 1 */
  13.  
  14.         try{ /* INICIO BLOQUE TRY 2 */
  15.             teclado.close();
  16.             entrada.close();
  17.         }catch(IOException e){
  18.             System.out.println(e.getMessage());
  19.         } /* FIN BLOQUE TRY 2 */
  20.         try{ /* INICIO BLOQUE TRY 3 */
  21.             conexion.close();
  22.         }catch(SQLException e){
  23.             System.out.println(e.getMessage());
  24.         } /* FIN BLOQUE TRY 3 */
  25.     } /* FIN BLOQUE FUNCION MAIN */
  26. }

Lo que ocurre: Las variables conexion, entrada y teclado, las estás declarando dentro del "bloque try 1" y por tanto sólo existen dentro de ese bloque. Así que cuando se acabe el "bloque try 1" esas variables ya no existirán. Cuando luego las intentes utilizar en los otros bloques, el compilador te dará error.


La solución:

Código java:
Ver original
  1. public class TecladoA {
  2.     public static void main(String[] args){  /* INICIO BLOQUE FUNCION MAIN */
  3.         // ...
  4.         Connection conexion;
  5.         InputStreamReader entrada;
  6.         BufferedReader teclado;
  7.         try{ /* INICIO BLOQUE TRY 1 */
  8.             conexion = DriverManager.getConnection("jdbc:odbc:curso1","jd bc","jdbc");
  9.             // ...
  10.             entrada = new InputStreamReader(System.in);
  11.             teclado = new BufferedReader(entrada);
  12.             // ...
  13.         }catch(IOException e){
  14.             System.out.println(e.getMessage());
  15.         } /* FIN BLOQUE TRY 1 */
  16.  
  17.         try{ /* INICIO BLOQUE TRY 2 */
  18.             teclado.close();
  19.             entrada.close();
  20.         }catch(IOException e){
  21.             System.out.println(e.getMessage());
  22.         } /* FIN BLOQUE TRY 2 */
  23.         try{ /* INICIO BLOQUE TRY 3 */
  24.             conexion.close();
  25.         }catch(SQLException e){
  26.             System.out.println(e.getMessage());
  27.         } /* FIN BLOQUE TRY 3 */
  28.     } /* FIN BLOQUE FUNCION MAIN */
  29. }

Ahora las 3 variables están declaradas dentro del "bloque de la función main" de modo que existen en todo el "bloque funcion main".


Eso sí, te seguirá dando problemas porque no estás manejando bien las excepciones. ¿Qué ocurre si falla el getConnection? Salta la primera excepción, no haces nada con ella. Intentas seguir. Haces teclado.close() y saltará un NullPointerException porque teclado es null y como no capturas la NPE entonces saltará y terminará el programa.