diff --git a/bundles/com.espressif.idf.launch.serial.ui/src/com/espressif/idf/launch/serial/ui/internal/NewSerialFlashTargetWizardPage.java b/bundles/com.espressif.idf.launch.serial.ui/src/com/espressif/idf/launch/serial/ui/internal/NewSerialFlashTargetWizardPage.java index ec9a6a3d7..de2260f52 100644 --- a/bundles/com.espressif.idf.launch.serial.ui/src/com/espressif/idf/launch/serial/ui/internal/NewSerialFlashTargetWizardPage.java +++ b/bundles/com.espressif.idf.launch.serial.ui/src/com/espressif/idf/launch/serial/ui/internal/NewSerialFlashTargetWizardPage.java @@ -273,6 +273,24 @@ public void widgetSelected(SelectionEvent e) setDefaults(); } + /** + * Helper method to safely append text to the infoArea from any thread. Checks for widget disposal to prevent + * SWTExceptions. + */ + private void appendToInfoArea(final String text) + { + if (display == null || display.isDisposed()) + { + return; + } + display.asyncExec(() -> { + if (infoArea != null && !infoArea.isDisposed()) + { + infoArea.append(text); + } + }); + } + private void setDefaults() { if (launchTarget == null) @@ -471,10 +489,9 @@ protected IStatus run(IProgressMonitor monitor) EspToolCommands espToolCommands = new EspToolCommands(); String message = String.format(Messages.TargetPortUpdatingMessage, serialPort); - display.asyncExec(() -> { - if (infoArea != null && !infoArea.isDisposed()) - infoArea.append(System.lineSeparator() + message); - }); + + appendToInfoArea(System.lineSeparator() + message); + try { Process chipInfoProcess = espToolCommands.chipInformation(serialPort); @@ -484,31 +501,30 @@ protected IStatus run(IProgressMonitor monitor) String readLine; while ((readLine = bufferedReader.readLine()) != null) { - display.asyncExec(() -> infoArea.append(".")); //$NON-NLS-1$ + appendToInfoArea("."); //$NON-NLS-1$ + chipInfo.append(readLine); chipInfo.append(System.lineSeparator()); } String chipType = extractChipFromChipInfoOutput(chipInfo.toString()); - display.asyncExec(() -> { - if (StringUtil.isEmpty(chipType)) - { - if (infoArea != null && !infoArea.isDisposed()) - infoArea.setText(infoArea.getText() + System.lineSeparator() - + String.format(Messages.TargetPortNotFoundMessage, serialPort)); - } - else - { - infoArea.append(System.lineSeparator()); - infoArea.append(String.format(Messages.TargetPortFoundMessage, serialPort, chipType)); - } - }); + + if (StringUtil.isEmpty(chipType)) + { + appendToInfoArea( + System.lineSeparator() + String.format(Messages.TargetPortNotFoundMessage, serialPort)); + } + else + { + appendToInfoArea(System.lineSeparator() + + String.format(Messages.TargetPortFoundMessage, serialPort, chipType)); + } } catch (Exception e) { Logger.log(e); } - display.asyncExec(() -> infoArea.append(System.lineSeparator())); + appendToInfoArea(System.lineSeparator()); return Status.OK_STATUS; }