2010-10-12 10 views
7

Estoy desarrollando una aplicación swing y estoy un poco confundido, ¿cómo puedo manejar las excepciones, por ejemplo, últimamente una parte de mi código renombrar archivos, así que cuando lo estaba probando vine con un "no tiene permiso para cambiar el nombre del archivo" como lo obtuve del mensaje de excepción de impresión. Entonces, ¿cómo podría expresar este mensaje al usuario? ¿Debería usar el mensaje JOptionPane o simplemente mostrarlo en la barra de estado?Cómo manejar la excepción java de manera fácil de usar

Gracias

Respuesta

8

De su pregunta, parece que ya sabe cómo manejar la excepción en el sentido java. Sin embargo, está buscando consejos sobre cómo reaccionar ante las excepciones una vez que los haya atrapado.

En el ejemplo específico que das en tu pregunta I (como usuario) querría que el error se presentara con claridad, por lo que JOptionPane podría ser tu mejor opción. No solo actualizaría la barra de estado ya que está muy cerca de fallar silenciosamente y el usuario quedará confundido.

Una regla empírica personal es que si el usuario probablemente espera que el código se complete antes de continuar con su tarea, entonces debe ser informado de la falla con fuerza, es decir, un cuadro modal. Si la falla se encuentra en una tarea de fondo que el usuario puede seguir sin preocuparse, o el código puede recuperarse de ella, o el código va a volver a intentarlo, entonces iría con el enfoque más sutil de la barra de estado o el cambio de ícono dependiendo de la UI.

+0

Gracias, pero otro punto es cómo imprimir un mensaje específico al usuario que mejor describa la excepción. ¿Debo imprimir el mensaje de excepción? –

+1

Supongo que eso debería depender de la excepción. Si está bastante seguro de que se trata de un problema de permiso, cuéntele al usuario exactamente eso. Sin embargo, si es una excepción que no ha anticipado (desbordamiento de pila, por ejemplo), puede tener sentido mostrar la excepción – kskjon

+1

Esto puede depender de quién sea su usuario, ¿son técnicos o no? También depende del error, en este caso específico, el error es bastante claro, por lo que probablemente solo puedas imprimir el texto de error, en otros casos ... di una NullPointerException ... eso no significa nada para el usuario y, como tal, deberías quizás darles una explicación más llana con instrucciones de revisar los registros o hablar con el servicio de asistencia de la compañía. –

-1

manejo de Uso Try-Catch ...

http://tutorials.jenkov.com/java-exception-handling/basic-try-catch-finally.html

Cuando se captura la excepción que puede hacer lo que quiera con él. Muéstrelo al usuario, haga otra cosa en el código, muestre otro mensaje al usuario según la excepción, etc.

+0

La cuestión no era pero "¿cómo mostrar excepciones para el usuario en mi GUI?". –

+0

¡pero eso es lo que el OP está pidiendo! –

+0

@Jason S - Mira el título. "de una manera fácil de usar" implica que el OP ya sabe cómo atraparlos. – Ishtar

0

Si capta la expresión (incluida en un try - catch - block) recibirá una notificación cuando esto excepción ocurre Entonces tienes que decidir: ¿hay alguna manera de hacer que las cosas funcionen nuevamente? ¿Podría, por ejemplo, pedirle al usuario otro nombre de archivo? ¡Entonces haz eso! Pero si no hay una manera sensata de eludir el error, simplemente haga abortar el programa.

+0

Esto no responde a la pregunta sobre "cómo notificar la excepción al usuario". –

1

No entiendo muy bien la primera parte de su pregunta, pero trato de contestar la segunda. En general, la forma en que desea mostrar un error al usuario depende del software y el error. En la mayoría de los casos, es apropiado JOptionPane o similar. Sin embargo, en algunos casos un diálogo modal puede ser demasiado intrusivo y la barra de estado puede ser una mejor manera de hacerlo. Pero, de nuevo, esto depende del tipo de software que está escribiendo.

1

Si prevé que podría haber una excepción como resultado de una acción del usuario, entonces debe atraparla explícitamente en el punto que tenga sentido y asegurarse de que su programa se recupere correctamente.

Por ejemplo, si el usuario puede cambiar el nombre de un archivo, puede invocar un método rename() que devuelve un código de estado para indicar el éxito o un código de error de falla. Dentro del método, uno de estos códigos podría ser activado por una excepción, pero al código de llamada no le importa. Una vez que la llamada vuelve, el código de estado se puede usar para determinar qué mensaje de error mostrar (si lo hay).

enum RenameStatus { 
    Success, 
    Failed, 
    SecurityFailed 
    } 

    void doRename(File fromFile, File toFile) { 
    switch (rename(fromFile, toFile)) { 
    case Success: 
     break; 
    case Failed: 
     // todo generic dialog rename operation failed 
     break; 
    case SecurityFailed: 
     // todo security dialog rename operation failed due to permission 
     break; 
    } 
    } 

    RenameStatus rename(File fromFile, File toFile) { 
    try { 
     if (!fromFile.renameTo(toFile)) { 
     return RenameStatus.Failed; 
     } 
     return RenameStatus.Success; 
    } 
    catch (SecurityException e) { 
     // Error - permission error 
     return RenameStatus.SecurityFailed; 
    } 
    catch (Exception e) { 
     return RenameStatus.Failed; 
    } 
    } 
+0

Me temo que esto no responde la pregunta de OP. –

2

Para elaborar un comentario realizado por Kevin D, realmente depende de la audiencia esperada de los usuarios. Si son técnicamente competentes, puede usar el texto de excepción tal como está. Si no, prefijaría el mensaje con el mensaje "Ha ocurrido un error, póngase en contacto con su personal de soporte técnico con la siguiente información:" a continuación, agregue el mensaje de error e idealmente un identificador único para localizar una entrada de registro asociada ... A menudo utilizo un fecha y hora para esto

Si realmente quieres ser elegante, puedes enviar un correo electrónico a la gente de soporte técnico con muchos más detalles, como la excepción y la pila completa, copia de entrada de registro, etc. He hecho esto en el pasado, pero tienes que tener cuidado ya que un error frecuente inundará rápidamente una bandeja de entrada :)

Por supuesto, si el error puede ser resuelto por el usuario, entonces puede decirlo (y cómo hacerlo) en su mensaje. Eso es tan completo y elegante como puede obtener ...

+0

Totalmente de acuerdo contigo –

0

El permiso de archivo es una especie de excepción "normal", no realmente "excepcional" como "disco lleno", por lo que probablemente solo use JOptionPane en lugar de enviar un informe de error. Dicho esto, algunas respuestas anteriores son muy informativas y deberían adoptarse para los casos generales.

Además, mi main() siempre empezar con esto: "? Cómo atrapar excepciones"

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() 
{ 
    public void uncaughtException(Thread t, Throwable e) 
    { 
     // do your things: see earlier answers 
    } 
} 
Cuestiones relacionadas