Java与Ruby一起使用时的java.lang.NullPointerException

时间:2013-03-21 11:30:20

标签: java ruby nullpointerexception jruby

我试图在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)  

请帮我找到问题。
提前致谢。

2 个答案:

答案 0 :(得分:1)

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

此处,is为空。

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

如果找到您的文件,则ClassLoader.getSystemResourceAsStream会出现问题。

答案 1 :(得分:0)

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

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

希望这会有所帮助!!