2

我正在尝试在 java 中调用 ruby​​ 函数。但是我NullPointerException在运行程序时得到了一个。
这是我的java代码

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.InputStream;

public class MyProgram
{

public static void main(String[] args) throws IOException, NoSuchMethodException 
    {
        try
        {
            ScriptEngineManager mgr = new ScriptEngineManager();
            ScriptEngine rbEngine = mgr.getEngineByExtension("rb");

            InputStream is = ClassLoader.getSystemResourceAsStream("src/myruby.rb");
            Reader reader = new InputStreamReader(is);
            rbEngine.eval(reader);
            Invocable invocableEngine = (Invocable)rbEngine;

            if (invocableEngine != null)
            {
                int set = (Integer) invocableEngine.invokeFunction("myfunc",6,6);
            }

        }
        catch (ScriptException e)
        {
            System.out.println("\nScriptException = "+e);
        }
    }
}

myruby.rb 文件包含

def myfunc(a,b)
  f=a+b
  return f
end

我得到的错误是,

Exception in thread "main" java.lang.NullPointerException
    at java.io.Reader.<init>(Unknown Source)
    at java.io.InputStreamReader.<init>(Unknown Source)
    at MyProgram.main(MyProgram.java:22)  

请帮我找出问题所在。
提前致谢。

4

2 回答 2

1
InputStream is = ClassLoader.getSystemResourceAsStream("src/myruby.rb");

在这里,is为空。

尝试使用绝对路径打开文件。

如果找到您的文件,则ClassLoader.getSystemResourceAsStream.

于 2013-03-21T11:32:30.833 回答
0

正如 LaGrandMere 在他的回答中所说,is这里是空的。

它为空,因为ClassLoader.getSystemResourceAsStream无法找到指定的资源。
ClassLoader查找classpath指定的资源。
要获得此资源,请添加myruby.rb您的类路径。

希望这可以帮助 !!

于 2013-03-21T11:52:06.193 回答