第二次尝试后发生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
我的建议是在流程中附加一个调试器,然后单步执行方法调用,查看实际调用的是什么,以及在什么时候执行偏离了您的预期
我猜您的意思可能是evalsymbol1+'.+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);