0

所以我试图在 Eclipse 中运行一个服务器并在运行它时得到这个错误。

    java.lang.NullPointerException
[1/19/13 9:07 PM]:  at com.rs2.util.Misc.loadScripts(Misc.java:544)
[1/19/13 9:07 PM]:  at com.rs2.Server.run(Server.java:129)
[1/19/13 9:07 PM]:  at java.lang.Thread.run(Thread.java:662)

这是 Server.java 中的第 129 行:

Misc.loadScripts(new File("./data/ruby/"));

这是 loadScripts 中的第 544 行:

engine.eval(new FileReader(file));

而且,如果需要,这里是 loadScripts 类的其余部分:

public static void loadScripts(File directory) {
        try {
            ScriptEngine engine = new ScriptEngineManager().getEngineByName("jruby");
            if (!directory.exists() || !directory.isDirectory()) {
                throw new IllegalArgumentException("Missing scripts folder! " + directory.getAbsolutePath());
            }
            for (File file : directory.listFiles()) {
                if (file.isDirectory()) {
                    loadScripts(file);
                } else {
                    if (file.getName().endsWith(".rb")) {
                        engine.eval(new FileReader(file));
                    }
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }

如果有人可以帮忙,请回答。提前致谢。

4

2 回答 2

2

ScriptEngineManager.getEngineByName()可以返回null。这可能就是发生的事情。

文档中:

返回:ScriptEngine由位于搜索中的工厂创建的 A。null如果没有找到这样的工厂,则返回。

于 2013-01-19T21:22:08.223 回答
1

发生这种情况engine是因为null执行第 544 行时:

engine.eval(new FileReader(file));

这是null因为ScriptEngineManager没有找到 JRuby 脚本引擎,您试图在这一行中加载:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("jruby");

确保在运行该程序时 JRuby 脚本引擎包含在类路径中。

您还应该在程序中添加一个检查,例如:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("jruby");
if (engine == null) {
    throw new UnsupportedOperationException("JRuby scripting engine not found");
}
于 2013-01-19T21:23:19.660 回答