Whatever I try, getEngineByName()
keeps returning null.
Here's my code:
final ScriptEngineManager manager = new ScriptEngineManager();
final ScriptEngine engine = manager.getEngineByName("js");
But engine
is null after these lines.
I also tried:
getEngineByName("javascript")
getEngineByName("nashorn")
They all return null
. Actually, manager.getEngineFactories()
shows an empty array - meaning there are no Factories at all.
These 2 answers suggest passing null
to the constructor, but it didn't work for me:
And this answer says it's a bug that has been fixed.
Update:
That was an Android Application Project in eclipse.
I didn't know it differs that much from a Java Project.
Now I just opened a new Java Project, wrote these lines, and I'm getting some results:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleBindings;
public class TestClass {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = scriptEngineManager.getEngineByName("js");
}
}
engine
isn't null !
Also, javax.script.*
was imported successfully as if it's already there (built in). Is this because I'm using Java 8?
In that previous (android) project I was using javax.script downloaded from here.
So what would be the problem in the Android Project and how do I solve it?
You have to write the argument with Capital Letters, as shown below:
getEngineByName("JavaScript");
^ ^