matlab代码的java空指针异常
我打算把我的MATLAB代码转换成java。我正在关注官方文件。但是在使用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文件中发生了什么。爪哇
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();
# 1 楼答案
你为什么要把“处置”放在最后的括号里? 即使try块中出现异常,最后大括号中的所有内容都会被执行
因此,在您的情况下,首先将magic设置为null,该值仅在try块中设置,并且仅在没有错误发生的情况下设置。 这样一来,一旦出现错误,theMagic就不会被设置,但您仍然尝试调用theMagic。在空值上释放
我想最简单的解决方案是在try块中编写dispose调用
# 2 楼答案
在dispose之前,请检查是否不为null: