gpt4 book ai didi

javascript - 在 Javascript 上使用 Rhino 的 evaluateString() 的 Android StackOverflow 错误

转载 作者:行者123 更新时间:2023-11-29 22:27:30 35 4
gpt4 key购买 nike

我正在尝试使用 Rhino for Android 以便在私有(private)网站上与此聊天服务进行交互。我实际上不需要查看应用程序的聊天屏幕,所以这就是为什么我认为 Rhino 可能是一个好方法,因为它隐藏了所有窗口/浏览器的东西。

1) 这是正确的方法吗?我尝试这样做的唯一原因是因为我听说 WebViews 不安全/最好的解决方案? (如果我的情况完全不正确,请纠正我!)

2) 所以我刚刚下载了 javascript 并尝试创建一个上下文并在其上评估字符串。我有合适的范围等等。此外,我还确保将优化级别设置为 -1,因为 Dalvik 代码不会运行从 Rhino 生成的 JVM 字节码。然而,我得到的错误是:

D/dalvikvm(  465): GC_FOR_MALLOC freed 1840 objects / 326872 bytes in 57ms
I/dalvikvm( 465): threadid=1: stack overflow on call to Lorg/mozilla/javascript/TokenStream;.getChar:I
I/dalvikvm( 465): method requires 36+20+8=64 bytes, fp is 0x4186933c (60 left)
I/dalvikvm( 465): expanding stack end (0x41869300 to 0x41869000)
I/dalvikvm( 465): Shrank stack (to 0x41869300, curFrame is 0x41869754)
D/dalvikvm( 465): GC_FOR_MALLOC freed 5607 objects / 262320 bytes in 47ms
W/dalvikvm( 465): Exception Lorg/mozilla/javascript/EvaluatorException; thrown during Lcom/test/testing/rhinochat/TestChat;.<clinit>
I/dalvikvm( 465): Rejecting re-init on previously-failed class Lcom/test/testing/rhinochat/TestChat; v=0x0
D/AndroidRuntime( 465): Shutting down VM
W/dalvikvm( 465): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
E/AndroidRuntime( 465): FATAL EXCEPTION: main
E/AndroidRuntime( 465): java.lang.NoClassDefFoundError: com.test.testing.rhinochat.TestChat
E/AndroidRuntime( 465): at com.test.testing.rhinochat.TestChatRunner.run(TestChatRunner.java:46)
E/AndroidRuntime( 465): at com.test.testing.rhinochat.StartChat.onCreate(StartChat.java:10)
E/AndroidRuntime( 465): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime( 465): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
E/AndroidRuntime( 465): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime( 465): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime( 465): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime( 465): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 465): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 465): at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 465): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 465): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 465): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 465): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 465): at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager( 59): Force finishing activity com.test.testing/.rhinochat.StartChat
W/ActivityManager( 59): Force finishing activity com.test.testing/.RhinoOnAndroidActivity
W/ActivityManager( 59): Activity pause timeout for HistoryRecord{450a1240 com.test.testing/.rhinochat.StartChat}

我已经设置了 Eclipse 允许的最大堆栈空间(我认为最大长度或类似的荒谬)但仍然出现此错误。使用各种设备进行测试,结果相同。

关键是:我在我的桌面上运行我的代码,所有的东西都能完美地编译和运行,即使没有对编译器进行优化。但是当我在 Android 上运行完全相同的代码时,它崩溃了。 (我已经尝试过模拟器和多种硬件设备)

所以在这一点上我非常难过。有谁知道为什么会这样?有没有办法让 Dalvik 在编译/运行这个 javascript 时表现得像 JVM?这是javascript的错吗?如果是这样,为什么我的桌面上使用相同的 javascript 却没有出现相同的错误?

更糟糕的是,我什至不知道如何获得关于 javascript 错误抛出的任何提示,或者堆栈跟踪或任何东西

如有任何帮助或提示,我们将不胜感激。

节日快乐,感谢阅读问题。

最佳答案

好的,所以问题是我没有问正确的问题。我不应该吓坏了,把一堆信息扔出去。

事实证明,如果您设置最大堆栈大小,它就会完全被忽略。因此,通过将堆栈大小设置为相当合理的数量,它就会起作用。当然,这需要对堆栈空间进行调整,并准确地弄清楚什么时候会起作用。事实证明,使用 100kb 的堆栈空间对我来说已经足够了,因为我还把它放在了一个单独的线程中。

Runnable r = new Runnable(){
public void run(){
//... evaluateString() function here ...
}
}
final Thread t = new Thread(new ThreadGroup("A") , r, "my thread name", 100000);
t.start();

关于javascript - 在 Javascript 上使用 Rhino 的 evaluateString() 的 Android StackOverflow 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8621596/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com