Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript脚本系统为Java发送NullPointerException_Java_Javascript - Fatal编程技术网

JavaScript脚本系统为Java发送NullPointerException

JavaScript脚本系统为Java发送NullPointerException,java,javascript,Java,Javascript,我想为我的Java应用程序使用JavaScript编写内容脚本,但我的脚本系统遇到了一些问题。假设系统加载一系列要在Java中执行的脚本,但是当我尝试加载脚本时,会出现以下错误: Exception in thread "main" sample-plugin.js is loaded? java.lang.NullPointerException at com.javascript.ScriptHandler.loadScript(ScriptHandler.java:47)

我想为我的Java应用程序使用JavaScript编写内容脚本,但我的脚本系统遇到了一些问题。假设系统加载一系列要在Java中执行的脚本,但是当我尝试加载脚本时,会出现以下错误:

Exception in thread "main" sample-plugin.js is loaded?
java.lang.NullPointerException
    at com.javascript.ScriptHandler.loadScript(ScriptHandler.java:47)
    at com.javascript.ScriptHandler.loadScriptsFromDirectory(ScriptHandler.java:33)
    at com.javascript.Main.main(Main.java:8)
Main.java

package com.javascript;

public class Main {

    private static ScriptHandler scriptHandler = new ScriptHandler();

    public static void main(String[] args) {
        scriptHandler.loadScriptsFromDirectory("./data/scripts/");
    }

}
ScriptHandler.java

package com.javascript;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.ArrayList;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class ScriptHandler {

    private static ScriptEngineManager scriptManager;
    private static ScriptEngine scriptEngine;

    public ScriptHandler() {
        scriptManager = new ScriptEngineManager();
        scriptEngine = scriptManager.getEngineByName("nashorn-javascript");
    }

    public void loadScriptsFromDirectory(String directory) {
        ArrayList<String> pathCollection = new ArrayList<String>();
        String[] path = { "skill", "player" };

        for (String i : path) {
            pathCollection.add(directory + i + "/");
        }

        for (int i = 0; i < pathCollection.size(); i++) {
            loadScript(pathCollection.get(i));
        }
    }

    private final void loadScript(String directory) {
        File file = new File(directory);

        if (file.exists() && file.isDirectory()) {
            File[] children = file.listFiles();

            for (File child : children) {
                if (child.isFile() && child.getName().endsWith(".js")) {
                    try {
                        System.out.println(child.getName() + " is loaded?");
                        scriptEngine.eval(new InputStreamReader(new FileInputStream(child)));
                    } catch (FileNotFoundException | ScriptException exception) {
                        exception.printStackTrace();
                    }
                } else if (child.isDirectory()) {
                    loadScriptsFromDirectory("./data/scripts/");
                }
            }
        }
    }

    public void executeScriptFunction(String function, Object... objects) {
        Invocable invocable = (Invocable) scriptEngine;

        try {
            invocable.invokeFunction(function, objects);
        } catch (NoSuchMethodException | ScriptException exception) {
            exception.printStackTrace();
        }
    }
}

根据,nashorn引擎名只是
nashorn
,而不是
nashorn javascript

脚本引擎“nashorn javascript”不存在。@almasshaikh这是jdk 8的东西
var plugin = function() {
    print("Hello from JavaScript")
}