java - matlab代码的空指针异常

标签 java matlab matlab-deployment

我打算将我的 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();

最佳答案

为什么要把 dispose 放在最后的括号里? 即使在 try block 中出现异常,最后大括号内的所有内容也会被执行

因此,在您的情况下,您首先将 theMagic 设置为 null,该值仅在您的 try block 中设置,并且仅在没有发生错误时设置。 这样,一旦发生错误,theMagic 就不会被设置,但您仍然尝试对 null 值调用 theMagic.dispose。

我想最简单的解决方案是将你的 dispose 调用写入 try block 内。

关于java - matlab代码的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48639024/

相关文章:

java - Zip/Jar 文件中的二进制差异

java - 在 Java 中使用非空白字符时 split 方法如何工作?

java - 在 MATLAB 中从 Java 加载库时出现 UnsatisfiedLinkError

python - 在 numpy 数组中查找相同值序列的长度(运行长度编码)

java - 调试从 JAVA 程序调用的 MATLAB 函数

java - 如何将ArrayList中的元素分组并分成三个List

java - 文件创建在 Java 中是如何工作的

c++ - 为 OpenCV 编译 MATLAB 绑定(bind)

c++ - 从 matlab 代码创建静态库

c# - DLL 和内存不足异常