2017-09-20 104 views
1

空我在Java中使用此代碼,並運行良好engine.eval()返回在Android Studio中

public String execute(String s) 
{ 
    Object result = null; 

    ScriptEngineManager manager = new ScriptEngineManager(); 


    ScriptEngine engine = manager.getEngineByName("JavaScript"); 


    if (engine == null) { 
     throw new UnsupportedOperationException("JavaScript scripting engine not found"); 
    } 

    Log.i("s",s); 

    try { 
     result = engine.eval(s); 
    } catch (Exception e) { 
     Log.i("e",e.toString()); 
    } 
    return result.toString(); 
} 

,但在Android Studio中使用相同的輸入(一)engine.eval(a); 返回空使用時!

Log cat of project

+0

我們可以看到字符串嗎? – Li357

+0

String a =「if((21.5 * length * length)-15 pmf

回答

0

在Android工作室您正在使用Android框架建設項目。默認情況下,JSR223未嵌入到Android的Java實現中。

但是,您可以在庫中註冊它們。

例如https://github.com/APISENSE/rhino-android這是嵌入rhino,從Java 7到Android的JavaScript引擎。 (免責聲明:我保持這個庫)


編輯隨後您的意見

我試圖模仿你的行爲,這裏是我有:

當使用犀牛ScriptEngine名:

09-20 11:13:16.151 5997-5997/? I/TEST: using Script engine name: rhino 
09-20 11:13:16.159 5997-5997/? E/AndroidRuntime: FATAL EXCEPTION: main 
Process: test.app, PID: 5997 
java.lang.NoClassDefFoundError: com.sun.script.javascript.ExternalScriptable 
    at com.sun.script.javascript.RhinoScriptEngine.<init>(RhinoScriptEngine.java:43) 
    at com.sun.script.javascript.RhinoScriptEngineFactory.getScriptEngine(RhinoScriptEngineFactory.java:51) 
    at javax.script.ScriptEngineManager.getEngineByName(ScriptEngineManager.java:154) 
    at test.app.Test.execute(Test.java:33) 
    at test.app.Test.scriptMethod(Test.java:23) 
    at test.app.Test.onCreate(Test.java:17) 
    [...] 

當使用JavaScript的ScriptEngine名稱:

09-20 11:16:16.883 8776-8776/? I/TEST: using Script engine name: JavaScript 
09-20 11:16:16.883 8776-8776/test.app E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: test.app, PID: 8776 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{test.app/test.app.Test}: java.lang.UnsupportedOperationException: Engine not found: JavaScript 
     [...] 
    Caused by: java.lang.UnsupportedOperationException: Engine not found: JavaScript 
     at test.app.Test.execute(Test.java:37) 
     at test.app.Test.scriptMethod(Test.java:23) 
     at test.app.Test.onCreate(Test.java:17) 
     [...] 

正如你可以看到犀牛試圖實例化一個ScriptEngine但加載當一個類拋出一個錯誤(com.sun.script.javascript.ExternalScriptable)。

問題是,你的jar依賴項包含JSR223和一些引擎定義,但不包含實際的腳本引擎。

要糾正這種情況,您可能需要將an actual rhino implementation添加到您的依賴項中。

+0

我使用jsr-223-1.0-pr.jar從http://www.java2s.com/Code/Jar/j/Downloadjsr22310prjar.htm – pmf

+0

通過在您提供的jar文件中反編譯'RhinoScriptEngineFactory',我們可以看到引擎名稱是'js'和'rhino'。你可以嘗試其中之一嗎? – Antoine

+0

兩者都是null。在「com.sun.script.javascript.RhinoScriptEngine。(RhinoScriptEngine.java:43)」和「com.sun.script.javascript.RhinoScriptEngineFactory.getScriptEngine(RhinoScriptEngineFactory.java:51)」 – pmf

相關問題