X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAppJmol.java;h=0aa4878d9263504541fa8bacf8f8a5ea6a76d328;hb=HEAD;hp=49eae9808ece4bff2ceb40effc4fef5f6a7f0ebc;hpb=b101d3b57771a1c8bf2314e1a29748e23b23d3c0;p=jalview.git diff --git a/src/jalview/gui/AppJmol.java b/src/jalview/gui/AppJmol.java index 49eae98..4d0de1b 100644 --- a/src/jalview/gui/AppJmol.java +++ b/src/jalview/gui/AppJmol.java @@ -28,16 +28,10 @@ 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; @@ -270,6 +264,8 @@ public class AppJmol extends StructureViewerBase } jmb.executeCommand(new StructureCommand(command), false); jmb.executeCommand(new StructureCommand("set hoverDelay=0.1"), false); + jmb.executeCommand(new StructureCommand("set antialiasdisplay on"), + false); jmb.setFinishedInit(true); } @@ -371,9 +367,10 @@ public class AppJmol extends StructureViewerBase } if (waitTotal > waitMax) { - System.err.println("Timed out waiting for Jmol to load files after " - + waitTotal + "ms"); - // System.err.println("finished: " + jmb.isFinishedInit() + jalview.bin.Console.errPrintln( + "Timed out waiting for Jmol to load files after " + + waitTotal + "ms"); + // jalview.bin.Console.errPrintln("finished: " + jmb.isFinishedInit() // + "; loaded: " + Arrays.toString(jmb.getPdbFile()) // + "; files: " + files.toString()); jmb.getStructureFiles(); @@ -424,6 +421,14 @@ 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 @@ -434,11 +439,21 @@ public class AppJmol extends StructureViewerBase @Override public void makePDBImage(ImageMaker.TYPE type) { - try { - makePDBImage(null, type, null, - BitmapImageSizing.nullBitmapImageSizing()); - } catch (ImageOutputException ioex) { - Console.error("Unexpected error whilst writing "+type.toString(),ioex); + while (!isRepainting()) + { + try { + Thread.sleep(2); + } catch (Exception q) + {} + } + try + { + makePDBImage(null, type, null, + BitmapImageSizing.defaultBitmapImageSizing()); + } catch (ImageOutputException ioex) + { + Console.error("Unexpected error whilst writing " + type.toString(), + ioex); } } @@ -450,9 +465,9 @@ public class AppJmol extends StructureViewerBase BitmapImageSizing bis = ImageMaker.getScaleWidthHeight(width, height, userBis); - float usescale = bis.scale; - int usewidth = bis.width; - int useheight = bis.height; + float usescale = bis.scale(); + int usewidth = bis.width(); + int useheight = bis.height(); ImageWriterI writer = new ImageWriterI() { @@ -472,7 +487,6 @@ public class AppJmol extends StructureViewerBase } } - jmb.jmolViewer.antialiased = true; jmb.jmolViewer.requestRepaintAndWait("image export"); jmb.jmolViewer.renderScreenImage(ig2, usewidth, useheight); } @@ -481,29 +495,40 @@ public class AppJmol extends StructureViewerBase .toLowerCase(Locale.ROOT); final ImageExporter exporter = new ImageExporter(writer, getProgressIndicator(), type, getTitle()); - + 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; - } - } - }); + 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()); + 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) { throw new ImageOutputException( @@ -532,7 +557,8 @@ public class AppJmol extends StructureViewerBase .openURL("http://wiki.jmol.org");// http://jmol.sourceforge.net/docs/JmolUserGuide/"); } catch (Exception ex) { - System.err.println("Show Jmol help failed with: " + ex.getMessage()); + jalview.bin.Console + .errPrintln("Show Jmol help failed with: " + ex.getMessage()); } } @@ -616,10 +642,17 @@ 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