From: James Procter Date: Thu, 6 Jul 2023 15:00:03 +0000 (+0100) Subject: JAL-4217 wrap imageExport CLI method's call to imageExport in a separate thread and... X-Git-Tag: Release_2_11_4_0~251 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=af1bb2283d7b4efb3d1f487d2831178b39f075fd;p=jalview.git JAL-4217 wrap imageExport CLI method's call to imageExport in a separate thread and hang around until it completes… --- diff --git a/src/jalview/gui/AppJmol.java b/src/jalview/gui/AppJmol.java index a14fabb..930a750 100644 --- a/src/jalview/gui/AppJmol.java +++ b/src/jalview/gui/AppJmol.java @@ -32,6 +32,12 @@ import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.FutureTask; import javax.swing.JPanel; import javax.swing.JSplitPane; @@ -475,13 +481,13 @@ public class AppJmol extends StructureViewerBase .toLowerCase(Locale.ROOT); final ImageExporter exporter = new ImageExporter(writer, getProgressIndicator(), type, getTitle()); - // hack to pass back and throw to caller + final Throwable[] exceptions = new Throwable[1]; exceptions[0] = null; final AppJmol us = this; try { - SwingUtilities.invokeAndWait(new Runnable() + Thread runner = Executors.defaultThreadFactory().newThread(new Runnable() { @Override public void run() @@ -496,13 +502,11 @@ public class AppJmol extends StructureViewerBase } } }); - } catch (InvocationTargetException e) + do { Thread.sleep(25); } while (runner.isAlive()); + } catch (Throwable e) { throw new ImageOutputException( "Unexpected error when generating image", e); - } catch (InterruptedException e) - { - Console.debug("Interrupted whilst waiting for image export", e); } if (exceptions[0] != null) { diff --git a/src/jalview/gui/ImageExporter.java b/src/jalview/gui/ImageExporter.java index f337b39..4ea30d9 100644 --- a/src/jalview/gui/ImageExporter.java +++ b/src/jalview/gui/ImageExporter.java @@ -124,6 +124,11 @@ public class ImageExporter */ if (file == null && !Jalview.isHeadlessMode()) { + if (Desktop.instance.isInBatchMode()) + { + // defensive error report - we could wait for user input.. I guess ? + throw(new ImageOutputException("Need an output file to render to when exporting images in batch mode!")); + } JalviewFileChooser chooser = imageType.getFileChooser(); chooser.setFileView(new JalviewFileView()); MessageManager.formatMessage("label.create_image_of",