4

多くのクラスを持つJavaSwingプログラムがあります。必要な場合はtry-catchを使用しますが、それ以外の場合は使用しません。また、例外がキャッチされたときにファイルに書き込むロガークラスもあります。スタックトレースとメッセージを出力します。

すべての例外をログに記録できるようにしたいのですが、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

4 に答える 4

7

絶対!

ThreadクラスのメソッドsetDefaultUncaughtExceptionHandlerを見てください。

Thread.setDefaultUncaughtExceptionHandler

于 2012-07-12T15:40:16.470 に答える
5

tryがカプセル化するのと同じだけキャッチするので、メインメソッドに周囲のtryブロックとcatch(Throwable)を配置して、スローできるすべてのものを確実にキャッチします。

ただし、通常は、例外が発生したときに個別に処理することをお勧めします。

于 2012-07-12T15:40:16.930 に答える
3

プログラムをクラッシュさせたくない例外を処理する必要があります。そうしないと、メインメソッドでcatch(Throwable)を実行できます。

于 2012-07-12T15:39:19.777 に答える
3

可能ですが、お勧めしません。

すべてのメソッドにをスローさせることができ、Exceptionそのメソッドを呼び出すすべてのメソッドも1つスローする必要があります。

これらのtrycatchブロックを使用することのポイントは、問題が発生している場所を正確に絞り込むことができるようにすることです。彼らはあなたを傷つけるのではなく、あなたを助けることを目的としています。

于 2012-07-12T15:39:22.983 に答える