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 中推出