第二次尝试后发生java.lang.NullPointerException

第二次尝试后发生java.lang.NullPointerException,java,nullpointerexception,Java,Nullpointerexception,我在double[]kurz=exp2.asDoubleArray()处得到了java.lang.NullPointerException当我第二次尝试按下此jButton时。第一次一切顺利,但第二次我有例外。看起来变量exp2是空的,但我不明白为什么。事先谢谢你,答案是肯定的,exp2为空。如果不知道这个REngine,或者它的eval方法的逻辑是什么,那么很难添加更多的内容。我甚至不知道第二次调用时boolOanda的值是多少(或者它是否与第一次调用不同),因此不清楚执行哪个分支来设置exp

我在
double[]kurz=exp2.asDoubleArray()处得到了
java.lang.NullPointerException
当我第二次尝试按下此jButton时。第一次一切顺利,但第二次我有例外。看起来变量exp2是空的,但我不明白为什么。事先谢谢你,答案是肯定的,
exp2
为空。如果不知道这个
REngine
,或者它的
eval
方法的逻辑是什么,那么很难添加更多的内容。我甚至不知道第二次调用时
boolOanda
的值是多少(或者它是否与第一次调用不同),因此不清楚执行哪个分支来设置
exp2

我的建议是在流程中附加一个调试器,然后单步执行方法调用,查看实际调用的是什么,以及在什么时候执行偏离了您的预期


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

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

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

       }       


所以,您需要进行一些调试,以确定(a)如果(!boolOanda)
正在执行,
的哪个分支,(b)哪些值被传递到
re.eval
,以及(c)为什么
re.eval
拒绝它们。

谢谢大家,我终于解决了这个问题。我声明了Rengine re=new Rengine(null,false,null);作为类变量(或全局变量)及其工作状态。
exp2 = re.eval(symbol1+"$"+symbol1+".Close");
exp2 = re.eval(symbol1+symbol2);