X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAppJmol.java;h=0aa4878d9263504541fa8bacf8f8a5ea6a76d328;hb=HEAD;hp=ba4eb9ca048b7568beabff276409f83080ba6f64;hpb=82fb94d50a9add200efe5e89214051ce59b42f6c;p=jalview.git diff --git a/src/jalview/gui/AppJmol.java b/src/jalview/gui/AppJmol.java index ba4eb9c..d37c9c0 100644 --- a/src/jalview/gui/AppJmol.java +++ b/src/jalview/gui/AppJmol.java @@ -421,6 +421,15 @@ public class AppJmol extends StructureViewerBase } + public boolean isRepainting() + { + if (renderPanel != null && renderPanel.isVisible()) + { + return renderPanel.repainting; + } + return false; + } + /** * Outputs the Jmol viewer image as an image file, after prompting the user to * choose a file and (for EPS) choice of Text or Lineart character rendering @@ -431,6 +440,15 @@ public class AppJmol extends StructureViewerBase @Override public void makePDBImage(ImageMaker.TYPE type) { + while (!isRepainting()) + { + try + { + Thread.sleep(2); + } catch (Exception q) + { + } + } try { makePDBImage(null, type, null, @@ -503,10 +521,17 @@ public class AppJmol extends StructureViewerBase } }); runner.start(); + long time = 0; do { Thread.sleep(25); - } while (runner.isAlive()); + } 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) { throw new ImageOutputException( @@ -620,10 +645,18 @@ public class AppJmol extends StructureViewerBase } else { - jmb.jmolViewer.renderScreenImage(g, currentSize.width, - currentSize.height); + repainting = true; + synchronized (jmb) + { + jmb.jmolViewer.renderScreenImage(g, currentSize.width, + currentSize.height); + + } + repainting = false; } } + + volatile boolean repainting = false; } @Override