Why does getEngineByName(“js”) return null?

Alaa M. picture Alaa M. · May 2, 2015 · Viewed 9.2k times · Source

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?

Answer

Siddharth Kumar picture Siddharth Kumar · Oct 13, 2015

You have to write the argument with Capital Letters, as shown below:

getEngineByName("JavaScript");
                 ^   ^