java.lang.NullPointerException после второй попытки - PullRequest
0 голосов
/ 27 октября 2010
 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 равна нулю, но я не понимаю, почему. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 27 октября 2010

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

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

или

exp2 = re.eval(symbol1+symbol2); 

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

0 голосов
/ 27 октября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...