我打算将我的MATLAB代码转换为java。我正在关注this官方文档。但在使用javac
进行编译后,我无法完成步骤17。
当我从cmd java -classpath .;"C:\Program Files\MATLAB\MATLAB Runtime\v93\toolbox\javabuilder\jar\javabuilder.jar";makesqr.jar getmagic 5
我收到错误:Exception in thread "main" java.lang.NullPointerException at getmagic.main(getmagic.java:36)
我现在只是关注本教程,不明白getmagic.java文件中发生了什么。
import com.mathworks.toolbox.javabuilder.*;
import makesqr.*;
class getmagic
{
public static void main(String[] args)
{
MWNumericArray n = null;
Object[] result = null;
Class1 theMagic = null;
if (args.length == 0)
{
System.out.println("Error: must input a positive integer");
return;
}
try
{
n = new MWNumericArray(Double.valueOf(args[0]),
MWClassID.DOUBLE);
theMagic = new Class1();
result = theMagic.makesqr(1, n);
System.out.println(result[0]);
}
catch (Exception e)
{
System.out.println("Exception: " + e.toString());
}
finally
{
MWArray.disposeArray(n);
MWArray.disposeArray(result);
theMagic.dispose();
}
}
}
错误在第36行:theMagic.dispose();
答案 0 :(得分:1)
为什么要将处置放在最后的括号中? 即使在try块
中出现异常,最终大括号内的所有内容都会被执行因此,在您的情况下,首先将theMagic设置为null,此值仅在try块中设置,并且仅在没有错误发生时设置。 这样,一旦发生错误,theMagic就没有设置,但你仍然试图在null值上调用theMagic.dispose。
我想最简单的解决方案是在try块中编写你的dispose调用。
答案 1 :(得分:0)
检查是否为空:
if(theMagic != null){
theMagic.dispose();
}