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 중국어 웹사이트의 기타 관련 기사를 참조하세요!