2010-10-27 87 views
0
private void jButtonStiahniActionPerformed(java.awt.event.ActionEvent evt) {            
    //start the Rengine (JRI) 
    String src,symbol1,symbol2 = null,title; 
    REXP exp2; 
    Rengine re = new Rengine(null, false, null); 

    re.eval("library('quantmod')"); 
      if(!boolOanda){ 
       src="yahoo"; 
       symbol1=jComboBoxSymbols.getSelectedItem().toString(); 
       re.eval("kurz=getSymbols('"+symbol1+"',src='"+src+"')"); 
       exp2 = re.eval(symbol1+"$"+symbol1+".Close"); 
      } 
      else { 
       src="oanda"; 
       symbol1=jComboBoxSymbols.getSelectedItem().toString(); 
       symbol2=jComboBoxSymbols2.getSelectedItem().toString(); 

       re.eval("kurz=getSymbols('"+symbol1+"/"+symbol2+"',src='"+src+"')"); 
       exp2 = re.eval(symbol1+symbol2); 

      } 

        double[] kurz = exp2.asDoubleArray(); 

         re.end(); 

     }  

我在double[] kurz = exp2.asDoubleArray();java.lang.NullPointerException當我試圖把這個JButton的秒時間。第一次一切順利,但第二次我有例外。它似乎像變量exp2爲空,但我不明白爲什麼。謝謝你提前顯示java.lang.NullPointerException第二次嘗試

+0

謝謝大家,我終於解決了它。我宣佈 Rengine re = new Rengine(null,false,null); 作爲類變量(或全局)及其工作。 – troger19 2010-10-29 08:31:25

回答

0

那麼,(可能是輕浮)的答案是是的,exp2爲空。不知道這個REngine什麼,或者它的eval方法的邏輯是什麼,很難添加更多。我甚至不知道第二次調用時boolOanda的值是什麼(或者它是否從第一次調用開始),所以不清楚哪個分支被執行來設置exp2

我建議將一個調試器附加到過程中,然後逐步調用方法調用並查看實際調用的內容,以及執行在什麼時候偏離您的期望。

我想也許你的意思是評估symbol1 + '.' + symbol2(目前這兩個符號直接連接)。或者,輸入可能完全錯誤,並且符號變量在第二次調用時完全爲空。但正如我上面所說的,我不知道這裏的動態模型是什麼樣子,所以最終你必須成爲發現差異的人。

0

如果EXP2爲空,這是這兩個任務之一的結果:

exp2 = re.eval(symbol1+"$"+symbol1+".Close"); 

exp2 = re.eval(symbol1+symbol2); 

所以,你需要做一些調試找出(一)哪個分支if(!boolOanda)正在執行,(b)什麼值被傳遞給re.eval,和(c)爲什麼re.eval拒絕他們。