2

Javaでルビー関数を呼び出そうとしています。しかし、私は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は、nullです。

ファイルを開くには絶対パスを試してください。

ファイルが見つかった場合は、に問題がありClassLoader.getSystemResourceAsStreamます。

于 2013-03-21T11:32:30.833 に答える
0

LaGrandMereが彼の答えで言ったように、isここではnullです。

ClassLoader.getSystemResourceAsStream指定されたリソースが見つからないため、null です。
ClassLoader指定されたリソースを検索しclasspathます。
このリソースを利用できるようにするmyruby.rbには、クラス パスを追加します。

お役に立てれば !!

于 2013-03-21T11:52:06.193 に答える