зеркало из https://github.com/mozilla/gecko-dev.git
e584b07f01
If I have a Java class with a normal method that throws an exception, Rhino (1.5pre4) will let JavaScript catch the exception. If the Java class has a getter method, Rhino will NOT let JavaScript catch the exception. Very disturbing. Here's a console dump to show you what I'm talking about: D:\jsSandbox>cat GIJoe.java public class GIJoe { // Getter public static int getYoJoe() throws Exception { throw new Exception("Please catch me!"); } // Normal public static int rebel() throws Exception { throw new Exception("Please catch me too!"); } } D:\jsSandbox>javac GIJoe.java D:\jsSandbox>cat gi.js var gi = new Packages.GIJoe(); try { var i = gi.rebel(); java.lang.System.err.println("rebel(): uncaught"); } catch(e1) { java.lang.System.err.println("rebel(): caught"); } try { var i = gi.yoJoe; java.lang.System.err.println("yoJoe: uncaught"); } catch(e2) { java.lang.System.err.println("yoJoe: caught"); } D:\jsSandbox>java -cp .;e:\javas\rhino1_5R4pre\js.jar org.mozilla.javascript.too ls.shell.Main js> load("gi.js"); rebel(): caught java.lang.Exception: Please catch me! org.mozilla.javascript.WrappedException: WrappedException of Please catch me! at org.mozilla.javascript.JavaMembers.get(JavaMembers.java:105) at org.mozilla.javascript.NativeJavaObject.get(NativeJavaObject.java:93) at org.mozilla.javascript.ScriptRuntime.getProp(ScriptRuntime.java:691) at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:1591) at org.mozilla.javascript.InterpretedScript.call(InterpretedScript.java: 63) at org.mozilla.javascript.InterpretedScript.exec(InterpretedScript.java: 54) at org.mozilla.javascript.Context.evaluateReader(Context.java:741) at org.mozilla.javascript.tools.shell.Main.evaluateReader(Main.java:347) at org.mozilla.javascript.tools.shell.Main.processSource(Main.java:336) at org.mozilla.javascript.tools.shell.Global.load(Global.java:169) at java.lang.reflect.Method.invoke(Native Method) at org.mozilla.javascript.FunctionObject.callVarargs(FunctionObject.java :586) at org.mozilla.javascript.FunctionObject.call(FunctionObject.java:460) at org.mozilla.javascript.ScriptRuntime.call(ScriptRuntime.java:1216) at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:1679) at org.mozilla.javascript.InterpretedScript.call(InterpretedScript.java: 63) at org.mozilla.javascript.InterpretedScript.exec(InterpretedScript.java: 54) at org.mozilla.javascript.Context.evaluateReader(Context.java:741) at org.mozilla.javascript.tools.shell.Main.evaluateReader(Main.java:347) at org.mozilla.javascript.tools.shell.Main.processSource(Main.java:284) at org.mozilla.javascript.tools.shell.Main.exec(Main.java:146) at org.mozilla.javascript.tools.shell.Main.main(Main.java:74) js> Due to a lack of an "uncaught" statement in the output, we see that the exception from GIJoe::getYoJoe() was indeed thrown, but not caught by the JavaScript. Do any nightly builds past 1.5pre4 address this issue? Todd Trimmer |
||
---|---|---|
.. | ||
docs | ||
examples | ||
macbuild | ||
src | ||
toolsrc | ||
Makefile | ||
README.html | ||
apiClasses.properties | ||
build-date | ||
build.xml |
README.html
<html> <!-- - The contents of this file are subject to the Netscape Public - License Version 1.1 (the "License"); you may not use this file - except in compliance with the License. You may obtain a copy of - the License at http://www.mozilla.org/NPL/ - - Software distributed under the License is distributed on an "AS - IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - implied. See the License for the specific language governing - rights and limitations under the License. - - The Original Code is Rhino code, released - May 6, 1999. - - The Initial Developer of the Original Code is Netscape - Communications Corporation. Portions created by Netscape are - Copyright (C) 1998-1999 Netscape Communications Corporation. All - Rights Reserved. - - Contributor(s): - Norris Boyd - - Alternatively, the contents of this file may be used under the - terms of the GNU Public License (the "GPL"), in which case the - provisions of the GPL are applicable instead of those above. - If you wish to allow use of your version of this file only - under the terms of the GPL and not to allow others to use your - version of this file under the NPL, indicate your decision by - deleting the provisions above and replace them with the notice - and other provisions required by the GPL. If you do not delete - the provisions above, a recipient may use your version of this - file under either the NPL or the GPL. --> <body> <h1> <span CLASS=LXRSHORTDESC> Rhino: JavaScript in Java<p> </span> </h1> <span CLASS=LXRLONGDESC> Rhino is an implementation of JavaScript in Java. Documentation can be found <a href="http://www.mozilla.org/js/rhino/rhino.html">here</a>. </span> </body> </html>