Перехват исключений - PullRequest
6 голосов
/ 04 июля 2010

Я бы хотел использовать пользовательское исключение, чтобы при появлении исключения любого типа появлялось удобное сообщение.

Какой хороший прямой способ сделать это?Есть ли какие-то дополнительные меры предосторожности, которые я должен предпринять, чтобы не мешать ЭДТ Swing?

Ответы [ 2 ]

6 голосов
/ 04 июля 2010

Исключительный перевод:

Это хорошая идея, чтобы не загрязнять ваше приложение сообщениями, которые не имеют никакого значения для конечного пользователя, но вместо этого создавать значимые исключения и сообщения, которые будут переводить исключение / ошибку, произошедшую где-то глубоко в реализации. вашего приложения.

Согласно комментарию @ Romain, вы можете использовать конструктор Exception (Throwable причина) для отслеживания исключения нижнего уровня.

С Effective Java 2nd Edition, позиция 61:

[...] верхние слои должны ловить исключения более низкого уровня и, в их место, выбросить исключения, которые могут быть объясняется с точки зрения более высокого уровня абстракция. Эта идиома известна как перевод исключения:

   // Exception Translation
    try {
         // Use lower-level abstraction to do our bidding
         ...
    } catch(LowerLevelException e) {
         throw new HigherLevelException(...);
    }
2 голосов
/ 05 июля 2010

Вы можете использовать java.lang.Thread.UncaughtExceptionHandler, который перехватывает все исключения, которые вам не нужны

import java.lang.Thread.UncaughtExceptionHandler;

   public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler {

   public void uncaughtException(Thread t, Throwable e) {
       Frame.showError("Titel", "Description", e, Level.WARNING);
       e.printStackTrace();
   }
}

зарегистрируйте его в своем приложении:

public static void main(String[] args) {
    Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
}

и в вашем графическом интерфейсе вы можете использовать org.jdesktop.swingx.JXErrorPane из SwingX , чтобы показать красивое всплывающее окно с сообщением об исключениях.

public static void showError(String title, String desc, Throwable e,
        Level level) {
    JXErrorPane.showDialog(this, new ErrorInfo(title,
            desc, null, null, e, level, null));
}
...