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

     }  

Je suis java.lang.NullPointerException à double[] kurz = exp2.asDoubleArray(); lorsque je tente de pousser ce DButton secondes temps. La première fois tout va bien, mais pour la deuxième fois j'ai une exception. Il semble que la variable exp2 est nulle, mais je ne comprends pas pourquoi. Merci d'avancejava.lang.NullPointerException après la deuxième tentative

+0

Merci les gars, je l'ai enfin résolu. J'ai déclaré Rengine re = new Rengine (null, false, null); en tant que variable de classe (ou globale) et son fonctionnement. – troger19

Répondre

0

Eh bien, la réponse (peut-être désinvolte) est que oui, exp2 est null. Sans savoir quoi que ce soit sur ce REngine, ou quelle est la logique de sa méthode eval, il est difficile d'ajouter beaucoup plus que cela. Je ne peux même pas dire quelle est la valeur de boolOanda sur la deuxième invocation (ou si elle change de la première), donc il n'est pas clair quelle branche est exécutée pour définir . Ce que je suggérerais est d'attacher un débogueur au processus, puis de passer par les appels de méthode et de voir ce qui est réellement appelé, et à quel point l'exécution diverge de vos attentes.

Je suppose que peut-être vous voulez évaluer symbol1 + '.' + symbol2 (actuellement les deux symboles sont directement concaténés). Ou peut-être que l'entrée est tout à fait fausse, et les variables de symbole sont complètement nulles sur le second appel. Mais comme je l'ai dit plus haut, je ne sais pas vraiment à quoi ressemble le modèle dynamique, donc en fin de compte, il faudrait que ce soit lui qui décèle la différence.

0

Si exp2 est nulle, il est le résultat d'une de ces deux missions:

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

ou

exp2 = re.eval(symbol1+symbol2); 

Donc, vous devez faire du débogage pour comprendre (a) quelle branche (b) quelles valeurs étaient passées à re.eval, et (c) pourquoi re.eval les rejetait.