X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAppJmol.java;fp=src%2Fjalview%2Fgui%2FAppJmol.java;h=49eae9808ece4bff2ceb40effc4fef5f6a7f0ebc;hb=4b031bc957ad1c5512798c6206adac7ed0364331;hp=1758b5bb105dbdd29aa2b2f3384a6bf82682529b;hpb=6723fff70de0a8576fab9196e99ece7ae67f3dbf;p=jalview.git diff --git a/src/jalview/gui/AppJmol.java b/src/jalview/gui/AppJmol.java index 1758b5b..49eae98 100644 --- a/src/jalview/gui/AppJmol.java +++ b/src/jalview/gui/AppJmol.java @@ -28,9 +28,16 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.io.File; +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; @@ -472,11 +479,48 @@ public class AppJmol extends StructureViewerBase }; String view = MessageManager.getString("action.view") .toLowerCase(Locale.ROOT); - ImageExporter exporter = new ImageExporter(writer, + final ImageExporter exporter = new ImageExporter(writer, getProgressIndicator(), type, getTitle()); - exporter.doExport(file, this, width, height, view, renderer, userBis); - + final Throwable[] exceptions = new Throwable[1]; + exceptions[0] = null; + final AppJmol us = this; + try + { + Thread runner = Executors.defaultThreadFactory().newThread(new Runnable() + { + @Override + public void run() + { + try + { + exporter.doExport(file, us, width, height, view, renderer, + userBis); + } catch (Throwable t) + { + exceptions[0] = t; + } + } + }); + runner.start(); + do { Thread.sleep(25); } while (runner.isAlive()); + } catch (Throwable e) + { + throw new ImageOutputException( + "Unexpected error when generating image", e); + } + if (exceptions[0] != null) + { + if (exceptions[0] instanceof ImageOutputException) + { + throw ((ImageOutputException) exceptions[0]); + } + else + { + throw new ImageOutputException( + "Unexpected error when generating image", exceptions[0]); + } + } } @Override