我有一些迫切需要通过MATLAB调用的mex文件,目前还没有办法解决。但是,我真的很鄙视MATLAB的GUI(in)可能性,并希望创建一些例如JavaFX应用程序。
我的问题:Java应用程序如何与正在运行的 MATLAB实例进行通信?
我知道您可以将Java对象包含在MATLAB中,但我更愿意拥有一个独立的Java应用程序。
答案 0 :(得分:2)
Java可以通过命令行执行命令,例如:
Process process = Runtime.getRuntime().exec(command);
process.waitFor();
因此可以通过Java中的命令行执行MATLAB脚本。
在MATLAB中,可以编写包含所需数据的文件。我不记得你可能会这样做的确切方式。 http://www.mathworks.com/help/matlab/ref/fprintf.html举了一个例子:
x = 0:.1:1;
A = [x; exp(x)];
fileID = fopen('exp.txt','w');
fprintf(fileID,'%6s %12s\n','x','exp(x)');
fprintf(fileID,'%6.2f %12.8f\n',A);
fclose(fileID);
这是某种解决方法,但它应该有效,并且实施起来并不是很难。
<强>更新强>
如果Matlab已经在运行并且您希望在另一个应用程序(Java)中与它通信,则可以通过localhost使用网络连接来完成。 Matlab可以监听一些预定义的端口(代码示例见http://www.mathworks.com/matlabcentral/fileexchange/11802-matlab-tcp-ip-code-example)并在&#34; start&#34;时执行一些操作。触发器通过Java发送(甚至一些数据和触发器)。在Java中,您可以使用Socket类(可以在此处找到一些代码示例http://www.javaworld.com/article/2077322/core-java/core-java-sockets-programming-in-java-a-tutorial.html)。
也可以将数据写入文件。例如,Java将一些命令添加到具有预定义名称(command.txt
)的某个文件中。 Matlab在循环中扫描此文件,当发现某些内容时,它开始计算(Java应用程序在某些results.txt
文件中等待结果)。
答案 1 :(得分:0)
我建议在Matlab中启动一个服务器,该服务器侦听特定端口以向/从Java客户端发送/接收数据。通过使用eval
Matlab命令,您甚至可以调用脚本/命令/等。由Java客户端远程控制。
您可能需要查看this code example。