JAL-4344 Some fixes of waiting blocks, and headless mode for export. Control logging...
[jalview.git] / src / jalview / gui / AppJmol.java
index 0aa4878..cb6aa13 100644 (file)
@@ -41,6 +41,7 @@ import javax.swing.event.InternalFrameEvent;
 
 import jalview.api.AlignmentViewPanel;
 import jalview.bin.Console;
+import jalview.bin.Jalview;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
 import jalview.datamodel.StructureViewerModel;
@@ -453,7 +454,6 @@ public class AppJmol extends StructureViewerBase
     float usescale = bis.scale();
     int usewidth = bis.width();
     int useheight = bis.height();
-
     ImageWriterI writer = new ImageWriterI()
     {
       @Override
@@ -484,35 +484,38 @@ public class AppJmol extends StructureViewerBase
     final Throwable[] exceptions = new Throwable[1];
     exceptions[0] = null;
     final AppJmol us = this;
+    Runnable exportRunnable = () -> {
+      try
+      {
+        exporter.doExport(file, us, width, height, view, renderer, userBis);
+      } catch (Throwable t)
+      {
+        Console.debug("Problem when exporting structure image", t);
+        exceptions[0] = t;
+      }
+    };
     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();
-      long time = 0;
-      do
+      if (Jalview.isHeadlessMode())
       {
-        Thread.sleep(25);
-      } while (runner.isAlive() && time++ < 4000);
-      if (time >= 4000)
+        exportRunnable.run();
+      }
+      else
       {
-        runner.interrupt();
-        throw new ImageOutputException(
-                "Jmol took too long to export. Waited for 100 seconds.");
+        Thread runner = Executors.defaultThreadFactory()
+                .newThread(exportRunnable);
+        runner.start();
+        long time = 0;
+        do
+        {
+          Thread.sleep(25);
+        } while (runner.isAlive() && time++ < 4000);
+        if (time >= 4000)
+        {
+          runner.interrupt();
+          throw new ImageOutputException(
+                  "Jmol took too long to export. Waited for 100 seconds.");
+        }
       }
     } catch (Throwable e)
     {