X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fjavascript%2FJSFunctionExec.java;h=29f3fa939f7ff60c1ccebdd615c99ded63118d9c;hb=a7169b1c72607f3c9357195b4999869650a2a891;hp=6ab086583d344e552c62b5b2e59bb3b17ec700f1;hpb=5408a7058422f1d268fcb18a9516789248912d95;p=jalview.git
diff --git a/src/jalview/javascript/JSFunctionExec.java b/src/jalview/javascript/JSFunctionExec.java
index 6ab0865..29f3fa9 100644
--- a/src/jalview/javascript/JSFunctionExec.java
+++ b/src/jalview/javascript/JSFunctionExec.java
@@ -1,43 +1,77 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * 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 .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.javascript;
+import jalview.bin.JalviewLite;
+
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);
}
- 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;
+ }
+ if (q != null)
+ {
+ for (JSFunctionExec jx : q)
+ {
+ jx.jvlite = null;
+
+ }
+ q.removeAllElements();
synchronized (q)
{
q.notifyAll();
}
}
- executor = null;
}
+ jvlite = null;
+ executor = null;
}
+ @Override
public void run()
{
while (jsExecQueue != null)
@@ -75,7 +109,7 @@ public class JSFunctionExec implements Runnable
}
/**
- * execute a javascript callback asynchronously
+ * execute a javascript callback synchronously
*
* @param _listener
* @param objects
@@ -120,6 +154,7 @@ public class JSFunctionExec implements Runnable
final Exception[] jsex = new Exception[1];
Runnable exec = new Runnable()
{
+ @Override
public void run()
{
try
@@ -149,15 +184,16 @@ 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;
+ jsex[0] = jex;
if (jvlite.debug)
{
System.err.println("Falling back to javascript: url call");
}
- StringBuffer sb = new StringBuffer("javascript:" + _listener
- + "(");
+ StringBuffer sb = new StringBuffer(
+ "javascript:" + _listener + "(");
for (int i = 0; objects != null && i < objects.length; i++)
{
if (i > 0)
@@ -167,9 +203,8 @@ public class JSFunctionExec implements Runnable
sb.append("\"");
// strip out nulls and complex objects that we can't pass this
// way.
- if (objects[i] != null
- && !(objects[i].getClass().getName()
- .indexOf("jalview") == 0))
+ if (objects[i] != null && !(objects[i].getClass().getName()
+ .indexOf("jalview") == 0))
{
sb.append(objects[i].toString());
}
@@ -211,10 +246,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)
@@ -225,6 +259,7 @@ public class JSFunctionExec implements Runnable
}
else
{
+ // wat for executor to notify us if it's running.
exec.run();
if (jsex[0] != null)
{