主要内容

本页采用了机器翻译。点击此处可查看英文原文。

com.mathworks.matlab.exceptions.MatlabExecutionException

Java 异常,表示在执行 MATLAB 代码时发生了错误

自 R2026a 起

描述

MatlabExecutionException 是一个封装了在 MATLAB® 代码执行过程中发生的错误的异常。该异常在 MATLAB 的错误处理系统与 Java® 的异常机制之间架起了一座桥梁,从而使 Java 应用程序能够正确捕获、处理和报告源自 MATLAB 的错误。

当 MATLAB 在执行过程中遇到错误时,该异常会封装原始的 MATLAB 异常(即 MatlabException),并保留其完整的堆栈跟踪,从而在保持与 Java 中异常处理模式兼容的同时,实现详细的错误诊断。

此异常主要用于 MATLAB Data API for Java 的异步执行模型中。在使用 fevalAsync() 方法时,MATLAB 执行错误会被捕获为 MatlabExecutionException 对象,然后封装在 ExecutionException 实例中,并由 Future.get() 方法抛出。为了处理这些异常,应用程序应捕获 ExecutionException,并检查其原因是否为 MatlabExecutionException

示例

public class Example {
    public static void main(String[] args) {
        String ctfPath = "C:/path/to/your/ctf";
        
        try (MatlabRuntime runtime = MatlabRuntime.startMatlab(ctfPath)) {
            // Start async computation with a function that will cause an error
            Future<Object> asyncResult = runtime.fevalAsync(1, "nonexistentFunction");
            
            System.out.println("MATLAB function call started in background...");
            
            try {
                // Get the result when ready
                Object result = asyncResult.get();
                System.out.println("Result: " + result);
                
            } catch (ExecutionException e) {
                // Check if the cause is a MatlabExecutionException
                if (e.getCause() instanceof MatlabExecutionException) {
                    MatlabExecutionException matlabEx = (MatlabExecutionException) e.getCause();
                    System.out.println("MATLAB execution failed: " + matlabEx.getMessage());
                    
                    // Access the MATLAB stack trace if available
                    if (matlabEx.getStackTrace() != null) {
                        System.out.println("MATLAB Stack Trace:");
                        for (StackTraceElement element : matlabEx.getStackTrace()) {
                            System.out.println("  " + element);
                        }
                    }
                } else {
                    System.out.println("Execution failed: " + e.getMessage());
                }
            }
            
        } catch (MatlabNotAvailableException | InterruptedException | 
                 IllegalArgumentException | IllegalStateException e) {
            System.out.println("Runtime error: " + e.getMessage());
        }
    }
}

版本历史记录

在 R2026a 中推出