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 サイトの他の関連記事を参照してください。