Hi, all, hoping someone can give me a few pointers as to what I'm doing
wrong.
I'm trying to embed Rhino in my Android app to add scripting
functionality. According to Google, the Rhino shell works fine on
Android, which I've confirmed by building and running it from source
under Donut. So unless I'm comparing apples and orangutangs, my use case
should work too.
First I tried the basic embedding examples from the documentation,
though I called cx.setOptimization(-1) to disable all compilation. No
luck. I then thought that perhaps something was being optimized in the
context before I could turn off optimization, so I created my own
ContextFactory, and set the optimization level in the onContextCreated()
method, but no luck. Here's my current Scala code for creating an
interpreter and evaling an empty string for now:
package info.thewordnerd.spiel.scripting
import org.mozilla.javascript.Context
import org.mozilla.javascript.ContextFactory
import org.mozilla.javascript.Scriptable
class MyContextFactory extends ContextFactory {
override protected def onContextCreated(cx:Context) {
cx.setOptimizationLevel(-1)
}
}
object Scripter {
val js = """
"""
def apply() = {
ContextFactory.initGlobal(new MyContextFactory)
val cx = Context.enter
cx.setOptimizationLevel(-1)
val scope = cx.initStandardObjects
val result = cx.evaluateString(scope, js, "<spiel>", 1, null)
Context.exit
true
}
}
Running this on the emulator gives the following error (line 20 in
scripts.scala is the Context.enter call):
E/AndroidRuntime( 771): Uncaught handler: thread main exiting due to
uncaught exception
E/AndroidRuntime( 771): java.lang.ExceptionInInitializerError
E/AndroidRuntime( 771): at
org.mozilla.javascript.Context.enter(Context.java:411)
E/AndroidRuntime( 771): at
org.mozilla.javascript.Context.enter(Context.java:406)
E/AndroidRuntime( 771): at
org.mozilla.javascript.Context.enter(Context.java:386)
E/AndroidRuntime( 771): at
info.thewordnerd.spiel.scripting.Scripter$.apply(scripting.scala:20)
E/AndroidRuntime( 771): at
info.thewordnerd.spiel.services.Spiel.onServiceConnected(Spiel.scala:28)
E/AndroidRuntime( 771): at
android.accessibilityservice.AccessibilityService$IEventListenerWrapper.executeMessage(AccessibilityService.java:222)
E/AndroidRuntime( 771): at
com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:45)
E/AndroidRuntime( 771): at
android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 771): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 771): at
android.app.ActivityThread.main(ActivityThread.java:4203)
E/AndroidRuntime( 771): at
java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 771): at
java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 771): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
E/AndroidRuntime( 771): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
E/AndroidRuntime( 771): at dalvik.system.NativeStart.main(Native
Method)
E/AndroidRuntime( 771): Caused by: java.lang.IllegalStateException:
Failed to create VMBridge instance
E/AndroidRuntime( 771): at
org.mozilla.javascript.VMBridge.makeInstance(VMBridge.java:69)
E/AndroidRuntime( 771): at
org.mozilla.javascript.VMBridge.<clinit>(VMBridge.java:49)
E/AndroidRuntime( 771): ... 15 more
So what am I missing that lets the shell, compiled on a very similar
toolchain, work just fine? Is there some setup step I'm missing?
Thanks.
_______________________________________________
dev-tech-js-engine-rhino mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino