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

これenginenull、544行目が実行されたときに発生します。

engine.eval(new FileReader(file));

そして、JRubyスクリプトエンジンが見つからなかったnullため、次の行にロードしようとしていました。ScriptEngineManager

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 に答える