我试图在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)
请帮我找到问题。
提前致谢。
答案 0 :(得分:1)
InputStream is = ClassLoader.getSystemResourceAsStream("src/myruby.rb");
此处,is
为空。
尝试使用绝对路径打开文件。
如果找到您的文件,则ClassLoader.getSystemResourceAsStream
会出现问题。
答案 1 :(得分:0)
正如LaGrandMere在他的回答is
中所说的那样,这里是空的。
它为null,因为ClassLoader.getSystemResourceAsStream
无法找到指定的资源。
ClassLoader
在指定的classpath
中查找资源。
要获得此资源,请在类路径中添加myruby.rb
。
希望这会有所帮助!!