我是Java新手,無法解決我遇到的範圍問題。我有一個Matlab連接(MConnect1()/MConnect2()
)方法,它需要是void
。我想從另一個類訪問方法中的變量,但得到一個NullPointerException
。我試圖創建一個方法爲getResult()
但這也行不通。我應該採取哪一步?從void返回數組方法
我想從void MConnect2()獲取array1。
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;
}
}
這完全是我沒有注意。感謝您指出,它現在工作正常。 Cok tesekkurler Sinan bey。 – 2013-04-04 00:40:49