是否有可能捕获所有可能的错误/异常?

时间:2012-07-12 15:37:06

标签: java swing exception try-catch

我有一个包含许多类的Java Swing程序。我确实在需要的地方使用try-catchs,但没有其他地方。我还有一个记录器类,它在捕获异常时写入文件。它打印出堆栈跟踪和消息。

我希望能够记录每个异常,但不会在任何地方放置try-catch。这可能吗?

- 编辑(我的主要方法) -

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());
    }
}

4 个答案:

答案 0 :(得分:7)

绝对!

查看Thread类的方法setDefaultUncaughtExceptionHandler。

Thread.setDefaultUncaughtExceptionHandler

答案 1 :(得分:5)

你捕获的内容与你的尝试封装一样多,所以在你的main方法中放置一个周围的try块并捕获(Throwable)以确保你捕获可以抛出的所有内容。

通常情况下,最好单独处理异常。

答案 2 :(得分:3)

您需要处理不想使程序崩溃的异常,否则您可以在主方法中捕获(Throwable)。

答案 3 :(得分:3)

可能,不建议。

你可以让每个方法抛出一个Exception,每个调用该方法的方法都必须抛出一个。

尝试使用catch块的重点是,您可以准确缩小问题所在的位置。它们是为了帮助你,而不是伤害你。