X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fjavascript%2FJSFunctionExec.java;h=09036e65fe14d8be8ba1e66556fe30059d11c2b0;hb=7ce72ca7fadf35a249427ecb836b22abb04ab653;hp=47e4538dbce76d35f77cf75840a32a9c9bf08c39;hpb=52e125bdf62f520d88a7aff8e6d9afe007dee15c;p=jalview.git diff --git a/src/jalview/javascript/JSFunctionExec.java b/src/jalview/javascript/JSFunctionExec.java index 47e4538..09036e6 100644 --- a/src/jalview/javascript/JSFunctionExec.java +++ b/src/jalview/javascript/JSFunctionExec.java @@ -1,38 +1,81 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8) + * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + */ package jalview.javascript; import java.net.URL; import java.util.Vector; -import netscape.javascript.JSException; import netscape.javascript.JSObject; import jalview.bin.JalviewLite; public class JSFunctionExec implements Runnable { - JalviewLite jvlite; + public JalviewLite jvlite; public JSFunctionExec(JalviewLite applet) { jvlite = applet; + + jsExecQueue = jvlite.getJsExecQueue(); + jvlite.setExecutor(this); + } + + public void finalize() + { + jvlite = null; + executor = null; + if (jsExecQueue != null) + { + jsExecQueue.clear(); + } + jsExecQueue = null; } - private static Vector jsExecQueue; + private Vector jsExecQueue; - private static Thread executor = null; + private Thread executor = null; - public static void stopQueue() + public void stopQueue() { if (jsExecQueue != null) { + Vector q = null; synchronized (jsExecQueue) { - Vector q = jsExecQueue; - q.removeAllElements(); + q = jsExecQueue; jsExecQueue = null; - executor.notify(); } - executor = null; + if (q != null) + { + for (JSFunctionExec jx : q) + { + jx.jvlite = null; + + } + q.removeAllElements(); + synchronized (q) + { + q.notifyAll(); + } + } } + jvlite = null; + executor = null; } public void run() @@ -72,7 +115,7 @@ public class JSFunctionExec implements Runnable } /** - * execute a javascript callback asynchronously + * execute a javascript callback synchronously * * @param _listener * @param objects @@ -146,7 +189,8 @@ public class JSFunctionExec implements Runnable { System.err.println(jex); } - if (jex instanceof netscape.javascript.JSException) + if (jex instanceof netscape.javascript.JSException + && jvlite.jsfallbackEnabled) { jsex[0] = (netscape.javascript.JSException) jex; if (jvlite.debug) @@ -208,10 +252,9 @@ public class JSFunctionExec implements Runnable }; if (async) { - if (JSFunctionExec.executor == null) + if (executor == null) { - JSFunctionExec.jsExecQueue = new Vector(); - JSFunctionExec.executor = new Thread(new JSFunctionExec(jvlite)); + executor = new Thread(new JSFunctionExec(jvlite)); executor.start(); } synchronized (jsExecQueue) @@ -222,6 +265,7 @@ public class JSFunctionExec implements Runnable } else { + // wat for executor to notify us if it's running. exec.run(); if (jsex[0] != null) {