From 96827bf5ea2400b605cacad5e6dbf9984441c06f Mon Sep 17 00:00:00 2001 From: hinerm Date: Mon, 22 Jul 2024 10:33:08 -0500 Subject: [PATCH] Show UI on EDT if required UserInterfaces have a requiresEDT flag. If this is set, the UIService should show them on the EDT when showUI is called. --- .../java/org/scijava/ui/DefaultUIService.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/scijava/ui/DefaultUIService.java b/src/main/java/org/scijava/ui/DefaultUIService.java index fe787ad5c..ff5663f91 100644 --- a/src/main/java/org/scijava/ui/DefaultUIService.java +++ b/src/main/java/org/scijava/ui/DefaultUIService.java @@ -32,6 +32,7 @@ import java.awt.GraphicsEnvironment; import java.io.File; import java.io.FileFilter; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -161,10 +162,25 @@ public void showUI(final String name) { @Override public void showUI(final UserInterface ui) { log.debug("Launching user interface: " + ui.getClass().getName()); - ui.show(); - // NB: Also show all the current displays. - for (final Display display : displayService.getDisplays()) { - ui.show(display); + Runnable showUI = () -> { + ui.show(); + // NB: Also show all the current displays. + for (final Display display : displayService.getDisplays()) { + ui.show(display); + } + }; + + // Dispatch on EDT if necessary + if (ui.requiresEDT()) { + try { + threadService.invoke(showUI); + } + catch (InterruptedException | InvocationTargetException e) { + throw new RuntimeException(e); + } + } + else { + showUI.run(); } eventService.publish(new UIShownEvent(ui)); }