You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Eclipse(2017年12月版,JDK10)中用Java运行Matlab文件?

Got it, let's walk through exactly how to get your Matlab .m and .mat files running in Eclipse 2017-12 with JDK 10, and make sure you get the exact same output as you do in the Matlab desktop. I’ve set this up a few times before, so here’s the step-by-step breakdown that should work for you:

1. 前置准备
  • 首先确保你的电脑上装了Matlab R2018a及以上版本——因为JDK 10是2018年发布的,Matlab从R2018a开始正式支持JDK 10,版本不兼容的话后续会出各种奇怪的错误。
  • 找到Matlab的Java引擎库:在你的Matlab安装目录里,导航到extern\engines\java,这里面有我们需要的matlabengine.jar,还有对应系统的本地库文件(Windows是.dll,Linux是.so,Mac是.dylib)。
2. 配置Eclipse项目
  • 打开Eclipse 2017-12,新建一个Java项目,创建的时候记得选择JDK 10作为项目的JRE(别选错成其他版本了)。
  • 右键你的项目 → Build Path → Add External JARs,找到刚才的matlabengine.jar并添加到项目里。
  • 接下来配置本地库(这步很关键,不然会报找不到本地库的错误):
    • 右键项目 → Build Path → Configure Build Path,切换到Libraries标签页。
    • 展开刚添加的matlabengine.jar,双击Native library location,点击External Folder,选择Matlab引擎的本地库目录(比如Windows下是Matlab安装目录\extern\engines\java\win64,Linux是.../glnxa64)。
  • 最后设置环境变量:确保系统的PATH环境变量包含Matlab的bin目录(比如Windows下是Matlab安装目录\bin\win64),或者你也可以在Eclipse的运行配置里添加这个路径到Environment变量中。
3. 运行Matlab .m函数文件的具体实现

假设你有一个mySumFunction.m函数,内容是这样的:

function total = mySumFunction(num1, num2)
    total = num1 + num2;
    disp(['计算结果:', num2str(total)]); % 和Matlab桌面一样输出日志
end

在Java里调用这个函数的代码如下:

import com.mathworks.engine.MatlabEngine;

public class RunMatlabFunc {
    public static void main(String[] args) throws Exception {
        // 启动Matlab引擎
        MatlabEngine matlabEng = MatlabEngine.startMatlab();
        
        // 把你的.m文件所在的文件夹添加到Matlab的搜索路径!这步绝对不能忘
        matlabEng.eval("addpath('D:\\MyMatlabFiles')"); // 替换成你实际的.m文件路径
        
        // 调用函数,传入参数并获取返回值
        double result = matlabEng.feval("mySumFunction", 10, 25);
        
        // 输出结果,和Matlab桌面的输出一致
        System.out.println("Java端获取的Matlab函数结果:" + result);
        
        // 用完记得关闭引擎
        matlabEng.close();
    }
}
  • 如果你的.m函数不需要参数,直接用matlabEng.feval("yourFuncName")就行;如果函数返回多个结果,可以用Object[] results = matlabEng.feval("yourFunc", arg1, arg2...)来接收所有返回值。
  • 要是你的.m脚本没有函数定义(就是纯脚本代码),直接用matlabEng.eval("run('D:\\MyMatlabFiles\\myScript.m')")就能运行。
4. 读取并处理.mat文件

如果你要读取.mat文件里的数据,比如文件里有一个名为testMatrix的二维矩阵,代码可以这么写:

import com.mathworks.engine.MatlabEngine;
import com.mathworks.matlab.types.Matrix;

public class ReadMatFile {
    public static void main(String[] args) throws Exception {
        MatlabEngine matlabEng = MatlabEngine.startMatlab();
        
        // 加载.mat文件
        matlabEng.eval("load('D:\\MyMatlabFiles\\testData.mat')");
        
        // 获取文件里的变量
        Matrix matrixData = matlabEng.getVariable("testMatrix");
        
        // 输出数据,和Matlab桌面查看的结果一致
        System.out.println("Mat文件中的矩阵行数:" + matrixData.getRowCount());
        System.out.println("Mat文件中的矩阵列数:" + matrixData.getColumnCount());
        for (int i = 0; i < matrixData.getRowCount(); i++) {
            for (int j = 0; j < matrixData.getColumnCount(); j++) {
                System.out.print(matrixData.getDouble(i, j) + " ");
            }
            System.out.println();
        }
        
        // 如果要修改数据并保存回.mat文件
        // matlabEng.setVariable("updatedMatrix", new Matrix(new double[][]{{1,2},{3,4}}));
        // matlabEng.eval("save('updatedData.mat', 'updatedMatrix')");
        
        matlabEng.close();
    }
}
5. 常见坑点排查
  • 运行前确保Matlab没有在后台运行,不然会启动引擎失败。
  • 遇到UnsatisfiedLinkError?检查本地库路径和PATH环境变量是否配置正确,或者Matlab版本和JDK版本是否兼容。
  • Matlab找不到你的.m文件?再检查addpath的路径是否正确,或者直接把.m文件放到Java项目的根目录下试试。
  • 输出和Matlab桌面不一致?检查你的.m函数是否依赖其他未添加路径的文件,或者参数传递是否正确(比如Matlab索引从1开始,Java从0开始,处理数组时要注意)。

内容的提问来源于stack exchange,提问作者sameer_nubia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:05:27