2010-10-27 2 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(); 

     }  

Я получил java.lang.NullPointerException в double[] kurz = exp2.asDoubleArray();, когда я пытаюсь нажать эту JButton второй раз. В первый раз все идет хорошо, но во второй раз у меня есть исключение. Похоже, переменная exp2 имеет значение null, но я не понимаю, почему. Заранее благодарю васjava.lang.NullPointerException после второй попытки

+0

Спасибо, ребята, я, наконец, решил. Я объявил Rengine re = new Rengine (null, false, null); как переменная класса (или глобальная) и ее работа. – troger19

ответ

0

Ну, (возможно, легкомысленный) ответ: есть, exp2 есть null. Не зная об этом REngine, или что логика его метода eval, трудно добавить гораздо больше. Я даже не могу сказать, что значение boolOanda относится ко второму вызову (или изменяется ли оно от первого), поэтому неясно, какая ветка выполняется для установки exp2.

Что я предлагаю - это добавить отладчик в процесс, затем пройти через вызовы метода и посмотреть, что на самом деле вызывается, и в какой момент исполнение расходится с вашими ожиданиями.

Я бы предположил, что возможно вы имеете в виду eval symbol1 + '.' + symbol2 (в настоящее время оба символа напрямую связаны друг с другом). Или, может быть, ввод просто совершенно неправильный, и переменные символа полностью нулевые во втором вызове. Но, как я уже сказал выше, я действительно не знаю, как выглядит динамическая модель здесь, поэтому в конечном итоге вам нужно будет определить несоответствие.

0

Если exp2 имеет нулевое значение, это результат одного из этих двух заданий:

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

или

exp2 = re.eval(symbol1+symbol2); 

Итак, вам нужно сделать некоторые отладки, чтобы выяснить (а), филиал из if(!boolOanda), (b) какие значения были переданы в re.eval, и (c) почему re.eval отклонил их.

Смежные вопросы