X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAppJmol.java;h=0aa4878d9263504541fa8bacf8f8a5ea6a76d328;hb=deb7e7788d802d45cc6b2f8a5a04285308f1e8ee;hp=806bfc1a68236c364684a9876e07853c48bff138;hpb=173c541c3bdef7cee4f72a76cc8e23e8902a8614;p=jalview.git diff --git a/src/jalview/gui/AppJmol.java b/src/jalview/gui/AppJmol.java index 806bfc1..0aa4878 100644 --- a/src/jalview/gui/AppJmol.java +++ b/src/jalview/gui/AppJmol.java @@ -31,6 +31,7 @@ import java.io.File; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.concurrent.Executors; import javax.swing.JPanel; import javax.swing.JSplitPane; @@ -46,6 +47,7 @@ import jalview.datamodel.StructureViewerModel; import jalview.datamodel.StructureViewerModel.StructureData; import jalview.gui.ImageExporter.ImageWriterI; import jalview.gui.StructureViewer.ViewerType; +import jalview.io.exceptions.ImageOutputException; import jalview.structure.StructureCommand; import jalview.structures.models.AAStructureBindingModel; import jalview.util.BrowserLauncher; @@ -262,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); } @@ -363,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(); @@ -426,21 +431,28 @@ public class AppJmol extends StructureViewerBase @Override public void makePDBImage(ImageMaker.TYPE type) { - makePDBImage(null, type, null, - BitmapImageSizing.nullBitmapImageSizing()); + try + { + makePDBImage(null, type, null, + BitmapImageSizing.defaultBitmapImageSizing()); + } catch (ImageOutputException ioex) + { + Console.error("Unexpected error whilst writing " + type.toString(), + ioex); + } } public void makePDBImage(File file, ImageMaker.TYPE type, String renderer, - BitmapImageSizing userBis) + BitmapImageSizing userBis) throws ImageOutputException { int width = getWidth(); int height = getHeight(); 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() { @@ -452,22 +464,73 @@ public class AppJmol extends StructureViewerBase RenderingHints.VALUE_ANTIALIAS_ON); if (type == TYPE.PNG && usescale > 0.0f) { - // for a scaled image, this scales down a bigger image to increase - // resolution - - ig2.scale(1 / usescale, 1 / usescale); + // for a scaled image, this scales down a bigger image to give the + // right resolution + if (usescale > 0.0f) + { + ig2.scale(1 / usescale, 1 / usescale); + } } - jmb.jmolViewer.antialiased = true; jmb.jmolViewer.requestRepaintAndWait("image export"); jmb.jmolViewer.renderScreenImage(ig2, usewidth, useheight); } }; 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(); + 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( + "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 @@ -479,7 +542,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()); } }