Problem mit ArrayIndexOutOfBoundsException in SwingWorker und Executor
Problembeschreibung
Verwendung von Executor und SwingWorker Beim Durchführen von Multithread-Vorgängen ist das Subjekt auf eine ArrayIndexOutOfBoundsException gestoßen, aber nach dem Auskommentieren der Anweisungen, die die Ausnahme im Code verursachen würden, ist die Ausnahme nicht erneut aufgetreten. Der Fragesteller möchte wissen, wie man eine solche Ausnahme abfängt.
Antwort
Um ArrayIndexOutOfBoundsException abzufangen, können Sie die Ausnahme von Future#get() in der done()-Methode von SwingWorker erneut auslösen.
@Override protected void done() { try { get(); } catch (InterruptedException | ExecutionException ie) { ie.printStackTrace(); } catch (IllegalStateException is) { is.printStackTrace(); } }
Geänderter Codeausschnitt
// ... @Override protected void done() { if (str.equals("StartShedule")) { try { get(); } catch (InterruptedException | ExecutionException ie) { ie.printStackTrace(); } catch (IllegalStateException is) { is.printStackTrace(); } } }
Vollständiger Code
Der vollständige Code lautet wie folgt:
// ... @Override protected void done() { if (str.equals("StartShedule")) { try { get(); } catch (InterruptedException | ExecutionException ie) { ie.printStackTrace(); } catch (IllegalStateException is) { is.printStackTrace(); } } } // ...
Nach Verwendung dieser Änderung kann der Code, der die Ausnahme verursacht, erfasst werden, auch wenn er nicht auskommentiert ist. ArrayIndexOutOfBoundsException.
Das obige ist der detaillierte Inhalt vonWie fängt man ArrayIndexOutOfBoundsException in SwingWorker- und Executor-Threads ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!