2013-04-03 3 views
0

Я новичок в Java и не смог решить проблему с областью видимости. У меня есть Matlab Connect (MConnect1()/MConnect2()) Метод, который должен быть void. Я пытаюсь получить доступ к переменной в методе из другого класса, но получаю NullPointerException. Я попытался создать метод как getResult(), но это также не работает. Какой шаг я должен предпринять?Return Array from void Метод

Я пытаюсь получить массив1 из void MConnect2().

package OMatlab; 

import matlabcontrol.*; 
import matlabcontrol.extensions.*; 
import java.util.Arrays; 

public class MatlabConnectVariable extends MatlabProxyFactory{ 

private String MConnectStatus; 
public double result1; 
public String result2; 
public double[][] array1; 
public double[][] array2; 
public int i; 
public boolean conStat; 



    public String getMConnectStatus() { 
     return MConnectStatus; 
    } 

    //Default Constructor 
    MatlabConnectVariable() 
    {  
     if (conStat = true) { 
      MConnectStatus="The MatlabConnect class instance has been initiated";} 
     else {MConnectStatus="WARNING: The MatlabConnect class instance could not been initiated";} 

    } 


    public void MConnect1() throws MatlabConnectionException, MatlabInvocationException 
    { 

     MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder() 
     .setUsePreviouslyControlledSession(true) 
     .setHidden(true) 
     .setMatlabLocation(null).build(); 


//  MatlabProxyFactoryOptions options = 
//    new MatlabProxyFactoryOptions.Builder() 
//     .setUsePreviouslyControlledSession(true) 
//     .build(); 

     MatlabProxyFactory factory = new MatlabProxyFactory(options); 
     //MatlabProxyFactory factory = new MatlabProxyFactory(); 

     // create proxy 
     MatlabProxy proxy = factory.getProxy(); 

     conStat = proxy.isConnected(); 

//  ////Set a variable, add to it, retrieve it, and print the result 
//  proxy.setVariable("a", 5); 
//  proxy.eval("a = a + 6"); 
//  result = ((double[]) proxy.getVariable("a"))[0]; 
//  System.out.println("Result: " + result); 



     //call user-defined function (must be on the path) 
     //proxy.eval("addpath('C:\\Users\\odogu1\\Documents\\MATLAB')"); 
     proxy.feval("data_loading_script"); 
     //proxy.eval("rmpath('C:\\Users\\odogu1\\Documents\\MATLAB')"); 

     proxy.setVariable("a", 1); 
     result1 = ((double[]) proxy.getVariable("new_data_added"))[0];   

     // close connection 
     proxy.disconnect(); 

} 




    public void MConnect2() throws MatlabConnectionException, MatlabInvocationException 
    { 

     MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder() 
     .setUsePreviouslyControlledSession(true) 
     .setHidden(true) 
     .setMatlabLocation(null).build(); 

     MatlabProxyFactory factory = new MatlabProxyFactory(options); 
      //MatlabProxyFactory factory = new MatlabProxyFactory(); 

      // create proxy 
      MatlabProxy proxy = factory.getProxy(); 

      conStat = proxy.isConnected(); 

      //call user-defined function (must be on the path) 
//   proxy.feval("data_loading_script"); 



      //Create a 4x3 array filled with random values 
      proxy.eval("array1 = randn(4,1)"); 

      //Print a value of the array into the MATLAB Command Window 
      proxy.eval("disp(['entry: ' num2str(array1(1, 1))])"); 

      //Get the array from MATLAB 
      MatlabTypeConverter processor = new MatlabTypeConverter(proxy); 
      double[][] array1 = processor.getNumericArray("array1").getRealArray2D(); 

      //Print out the same entry, using Java's 0-based indexing 
//   System.out.println("entry: " + array1.getRealValue(2, 1)); 

      //Convert to a Java array and print the same value again  
//   double[][] result2 = array1.getRealArray2D(); 


//   System.out.println("ENTRY: " + result2[0][0]); 

      int p=0; 
      for(int i = 0; i < array1.length; i++) 
      { 
       System.out.println(Arrays.toString(array1[i])); 
//    result2 = Arrays.toString(array1[i]); 

      } 


//   System.out.println(Arrays.toString(result2)); 


//   proxy.setVariable("a", 110); 
//   result2 = ((double[]) proxy.getVariable("a"))[0]; 


      //result2 = ((double[]) proxy.getVariable("new_data")); 


      // close connection 
      proxy.disconnect(); 
    } 

    public double[][] getResult2() { 

     return array1; 
    } 

} 

ответ

1

Похоже, что вы определили массив как поле, но вы его никогда не использовали. Вы определили другой с таким же именем в этом методе, содержащие следующие строки:

MatlabTypeConverter processor = new MatlabTypeConverter(proxy); 
double[][] array1 = processor.getNumericArray("array1").getRealArray2D(); 

Таким образом, вы не получите Array1 заполнены с любыми данными. Просто выполните:

array1 = processor.getNumericArray("array1").getRealArray2D(); 

и попробуйте позвонить getResult2().

+1

Это был полностью мой недостаток внимания. Спасибо за то, что он замечает, теперь он отлично работает. Cok tesekkurler Синан бей. –

0

В методе getResult2() вы возвращаете массив1, определенный как член класса, который вы никогда не инициализируете (эрго, вы всегда получите его значение null). Вы должны изменить строку

double[][] array1 = processor.getNumericArray("array1").getRealArray2D();

в

array1 = processor.getNumericArray("array1").getRealArray2D();

+0

Спасибо за ответ, я получил его работу. –