2016-10-10 76 views
0

我相對較新使用RJava,並且從我正在嘗試的一段代碼中獲得空指針異常。我懷疑這可能是由於我使用的數據類型,但對如何解決這個問題有點困惑。任何幫助,這將是驚人的。在RJava中與Java一起使用RQuantLib

import org.rosuda.JRI.Rengine; 



    public class RJava { 

    public static void main(String a[]) { 


     String javaVector = "c(put, 0.0425, 66.592, 66.00, 0, 0.068, 0.072, 0.1)"; 


     Rengine engine = new Rengine(new String[] { "--no-save" }, false, null); 


     engine.eval("library(RQuantLib)"); 
     engine.eval("rVector=" + javaVector); 
     engine.eval("Euvol=EuropeanOptionImpliedVolatility(rVector)"); 

     double vol = engine.eval("Euvol").asDouble(); 
     System.out.println("Vol=" + vol); 

    } 
} 

     Exception in thread "main" java.lang.NullPointerException 
     at co.karan.RJava.main(RJava.java:49) 
+0

您的項目使用哪些依賴關係jar包含類org.rosuda.JRI.Rengine? – hammerfest

+0

我有JRI.jar,JRIEngine.jar和REngine.jar。 –

+0

版本號? – hammerfest

回答

0

你有一個空的例外,它在RJava發生,你嘗試過使用調試器來找出它到底崩潰?

您的代碼無法在javaVectornew Rengine中崩潰,因爲Java運行時確保它會引發異常,但它不會爲空異常。您的代碼也不會在您的eval調用中崩潰。還有什麼?

您的代碼崩潰在engine.eval("Euvol")。函數eval爲您提供了一個null,並且您嘗試將其轉換爲double,您無法執行此操作。

現在,你應該思考爲什麼你的R引擎給你一個空的異常。有幾種可能性:

:您沒有安裝QuantLib。如果您的QuantLib未正確安裝,則RQuantLib將無法工作。更糟的是,你甚至可能沒有安裝RQuantLib。

:您對RQuanlib的輸入不正確。閱讀文檔:

enter image description here

第一個參數是一個字符串。在您的代碼中,您輸入put,這是一個變量但不是字符串。

R矢量c(put, 0.0425, 66.592, 66.00, 0, 0.068, 0.072, 0.1)無效。嘗試將它複製到你的R,你會得到一個錯誤。