首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有可能捕获所有可能的错误/异常?

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

Stack Overflow用户
提问于 2012-07-12 23:37:06
回答 4查看 1.6K关注 0票数 4

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

我希望能够记录每个异常,但不会将try-catch放在所有地方。这个是可能的吗?

-- EDIT (我的main方法) --

代码语言:javascript
运行
复制
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());
    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-12 23:40:16

绝对一点儿没错!

看看Thread类的方法setDefaultUncaughtExceptionHandler。

Thread.setDefaultUncaughtExceptionHandler

票数 7
EN

Stack Overflow用户

发布于 2012-07-12 23:40:17

您捕获的内容与try封装的内容一样多,因此在main方法中放入一个环绕的try块和catch(Throwable),以确保捕获可能抛出的所有内容。

不过,在异常发生时单独处理通常是一个更好的主意。

票数 5
EN

Stack Overflow用户

发布于 2012-07-12 23:39:20

你需要处理那些你不想让程序崩溃的异常,否则你只能在main方法中捕获(Throwable)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11455416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档