我有一个包含许多类的Java Swing程序。我确实在需要的地方使用try-catchs,但不在其他地方。我还有一个记录器类,它在捕获到异常时写入文件。它打印出堆栈跟踪和消息。
我希望能够记录每个异常,但不会将try-catch放在所有地方。这个是可能的吗?
-- EDIT (我的main方法) --
public class Bacon extends Thread implements UncaughtExceptionHandler {
public static Bacon instance = null;
private JFrame main;
private Bacon() {
main = new JFrame("Bacon");
main.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
main.addWindowListener(new WindowEventHandler());
setLAF();
main.setSize(Constants.MAIN_DIMENSION);
main.setLocationRelativeTo(null);
main.setExtendedState(JFrame.MAXIMIZED_BOTH);
main.setIconImage(getIcon());
setUserName();
setUncaughtExceptionHandler(this);
main.setJMenuBar(Menu.getInstance());
main.setContentPane(getMainPanel());
main.setVisible(true);
}
public static Bacon getInstance() {
if(instance == null)
instance = new Bacon();
return instance;
}
private JPanel getMainPanel() {
JPanel main = new JPanel(new BorderLayout());
main.add(Tabs.getInstance(), BorderLayout.CENTER);
main.add(StatusBar.getInstance(), BorderLayout.SOUTH);
return main;
}
.
.
.
.
.
.
.
public static void main(String[] args) {
try {
getInstance();
} catch (Throwable t) {
ErrorLogging.log(t.getStackTrace(), t.getMessage());
}
}
@Override
public void uncaughtException(Thread t, Throwable e) {
ErrorLogging.log(e.getStackTrace(), e.getMessage());
}
}发布于 2012-07-12 23:40:16
绝对一点儿没错!
看看Thread类的方法setDefaultUncaughtExceptionHandler。
Thread.setDefaultUncaughtExceptionHandler
发布于 2012-07-12 23:40:17
您捕获的内容与try封装的内容一样多,因此在main方法中放入一个环绕的try块和catch(Throwable),以确保捕获可能抛出的所有内容。
不过,在异常发生时单独处理通常是一个更好的主意。
发布于 2012-07-12 23:39:20
你需要处理那些你不想让程序崩溃的异常,否则你只能在main方法中捕获(Throwable)。
https://stackoverflow.com/questions/11455416
复制相似问题