ホームページ > Java > &#&チュートリアル > SwingWorker および Executor スレッドで ArrayIndexOutOfBoundsException をキャッチするにはどうすればよいですか?

SwingWorker および Executor スレッドで ArrayIndexOutOfBoundsException をキャッチするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-19 20:08:10
オリジナル
196 人が閲覧しました

How to Catch ArrayIndexOutOfBoundsException in SwingWorker and Executor Threads?

SwingWorker および Executor での ArrayIndexOutOfBoundsException の問題

問題の説明

Executor と SwingWorker の使用マルチスレッド操作を実行しているときに、サブジェクトは ArrayIndexOutOfBoundsException を検出しましたが、コード内の例外の原因となるステートメントをコメントアウトした後、例外は再度表示されませんでした。質問者は、そのような例外をキャッチする方法を知りたいと考えています。

回答

ArrayIndexOutOfBoundsException をキャッチするには、SwingWorker の Done() メソッドの Future#get() から例外を再スローできます。

@Override
protected void done() {
    try {
        get();
    } catch (InterruptedException | ExecutionException ie) {
        ie.printStackTrace();
    } catch (IllegalStateException is) {
        is.printStackTrace();
    }
}
ログイン後にコピー

変更されたコード スニペット

// ...

@Override
protected void done() {
    if (str.equals("StartShedule")) {
        try {
            get();
        } catch (InterruptedException | ExecutionException ie) {
            ie.printStackTrace();
        } catch (IllegalStateException is) {
            is.printStackTrace();
        }
    }
}
ログイン後にコピー

完全なコード

完全なコードは次のとおりです。

// ...

@Override
protected void done() {
    if (str.equals("StartShedule")) {
        try {
            get();
        } catch (InterruptedException | ExecutionException ie) {
            ie.printStackTrace();
        } catch (IllegalStateException is) {
            is.printStackTrace();
        }
    }
}

// ...
ログイン後にコピー

この変更を使用すると、コメントアウトされていない場合でも、例外を引き起こすコードをキャプチャできるようになります。 ArrayIndexOutOfBoundsException。

以上がSwingWorker および Executor スレッドで ArrayIndexOutOfBoundsException をキャッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート