- Javaで実装されたメソッドが例外をスローした場合、e.javaExceptionにJavaの例外オブジェクトが入っている
- スクリプトエラーの場合、e.rhinoExceptionにRhinoの例外オブジェクトが入っている
- スクリプトで明示的にthrowを実行した場合、eにスローされたオブジェクトそのものが入っている
var stdout = java.lang.System.out;function catchAndDumpException(func) { try { func(); } catch (e) { if (e.javaException) { stdout.println("e.javaException=" + e.javaException); } else if (e.rhinoException) { stdout.println("e.rhinoException=" + e.rhinoException); } else { stdout.println("e=" + e); } }}catchAndDumpException(function() { java.lang.Class.forName("UNKNOWN-CLASS"); // ClassNotFoundException});catchAndDumpException(function() { undefined.name; // EcmaError});catchAndDumpException(function() { throw new java.lang.IllegalArgumentException("Message");});catchAndDumpException(function() { throw "Error";});2-1. Rhino1.7で実行する:
>java -classpath .;js.jar org.mozilla.javascript.tools.shell.Main -w -debug exception-type.jse.javaException=java.lang.ClassNotFoundException: UNKNOWN-CLASSe.rhinoException=org.mozilla.javascript.EcmaError: TypeError: Cannot read property "name" from undefined (exception-type.js#22)e=java.lang.IllegalArgumentException: Messagee=Error2-2. jrunscript(Java1.7)で実行すると、結果はRhino1.7とほぼ同じ:
>jrunscript exception-type.jse.javaException=java.lang.ClassNotFoundException: UNKNOWN-CLASSe.rhinoException=sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot read property "name" from undefined (exception-type.js#22)e=java.lang.IllegalArgumentException: Messagee=Error
0 件のコメント:
コメントを投稿