第二次尝试后java.lang.NullPointerException

时间:2010-10-27 14:42:17

标签: java nullpointerexception

 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();

       }       

当我尝试第二次推送这个jButton 时,我在java.lang.NullPointerException获得double[] kurz = exp2.asDoubleArray();。第一次一切顺利,但第二次我有例外。似乎变量exp2为null,但我不明白为什么。提前谢谢

2 个答案:

答案 0 :(得分:0)

嗯,(或许是轻率的)答案是是的,exp2为空。如果不了解这个REngine,或者它的eval方法的逻辑是什么,那就很难添加更多。{1}}我甚至不知道第二次调用boolOanda的值是什么(或者它是否从第一次调用改变),因此不清楚执行哪个分支来设置exp2

我建议将调试器附加到进程,然后逐步调用方法调用并查看实际调用的内容,以及执行何时与您的期望不同。

我猜想也许你的意思是eval symbol1 + '.' + symbol2(目前这两个符号都是直接连接的)。或者输入可能完全错误,并且第二次调用时符号变量完全为空。但正如我上面所说的那样,我真的不知道动态模型在这里是什么样的,所以最终你必须要找出差异。

答案 1 :(得分:0)

如果exp2为null,则它是这两个赋值之一的结果:

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

exp2 = re.eval(symbol1+symbol2); 

所以,你需要做一些调试来弄清楚(a)正在执行if(!boolOanda)的哪个分支,(b)传递给re.eval的值是什么,以及(c)为什么re.eval拒绝了他们。