1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.xnap.commons.gui;
21
22 import java.awt.Component;
23 import javax.swing.SwingUtilities;
24 import org.xnap.commons.i18n.I18nFactory;
25 import org.xnap.commons.settings.BooleanSetting;
26 import org.xnap.commons.util.UncaughtExceptionListener;
27 import org.xnap.commons.util.UncaughtExceptionManager;
28
29
30 public class ErrorHandler implements UncaughtExceptionListener {
31
32 private ErrorDialog dialog;
33 private BooleanSetting showDialogSetting;
34 private Component parent;
35 private UncaughtExceptionManager exceptionManager;
36 private BooleanSetting detailsVisibleSetting;
37
38 public ErrorHandler(Component parent,
39 UncaughtExceptionManager exceptionManager,
40 BooleanSetting showDialogSetting,
41 BooleanSetting detailsVisibleSetting)
42 {
43 this.parent = parent;
44 this.exceptionManager = exceptionManager;
45 this.showDialogSetting = showDialogSetting;
46 this.detailsVisibleSetting = detailsVisibleSetting;
47 }
48
49 public void handle(Throwable e)
50 {
51 uncaughtException(Thread.currentThread(), e);
52 }
53
54 public void setParent(Component parent)
55 {
56 this.parent = parent;
57 }
58
59 public void uncaughtException(final Thread t, final Throwable e)
60 {
61 if (showDialogSetting != null && !showDialogSetting.getValue()) {
62 return;
63 }
64
65 Runnable runner = new Runnable()
66 {
67 public void run()
68 {
69 if (dialog == null || dialog.isBusy()) {
70 dialog = new ErrorDialog(I18nFactory.getI18n(ErrorDialog.class).tr("An unknown problem has occured!"),
71 exceptionManager, true,
72 showDialogSetting,
73 detailsVisibleSetting);
74 dialog.show(parent);
75 }
76 dialog.add(t, e);
77 }
78 };
79 SwingUtilities.invokeLater(runner);
80 }
81
82 }