有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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();


共 (2) 个答案

  1. # 1 楼答案

    你为什么要把“处置”放在最后的括号里? 即使try块中出现异常,最后大括号中的所有内容都会被执行

    因此,在您的情况下,首先将magic设置为null,该值仅在try块中设置,并且仅在没有错误发生的情况下设置。 这样一来,一旦出现错误,theMagic就不会被设置,但您仍然尝试调用theMagic。在空值上释放

    我想最简单的解决方案是在try块中编写dispose调用

  2. # 2 楼答案

    在dispose之前,请检查是否不为null:

    if(theMagic != null){
        theMagic.dispose();
    }