0

我在我的项目中使用 matlab,我想在 java 中检索 matlab 的结果。只是我想要结果。我想检索我在 java 中的 matlab 中创建的文件的结果。我使用此代码,但它在 matlab windows 中给了我结果,我只想在 java 中检索结果。这是代码

public class matlab {
    private static File myMATLABScript;
    //private static File myMATLABScript;
    public static String runScript(File scriptName) {
        String output = ""  ;
        String error = "";
        try {
            //String commandToRun = "matlab -r myMATLABScript -nodisplay < " + scriptName;
            String commandToRun = "matlab  -nosplash -r myMATLABScript -nodisplay -nodesktop < " + scriptName;

            System.out.println(commandToRun);
            Process p = Runtime.getRuntime().exec(commandToRun);
            String s;
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
            BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
            // read the output from the command
            System.out.println("\nHere is the standard output of the command:\n");
            while ((s = stdInput.readLine()) != null) {
                output = s + "\n";
                System.out.println(s);
                //System.out.println("what is the problem");
            }
            // read any errors from the attempted command
            //System.out.println("\nHere is the standard error of the command (if any):\n);
            while ((s = stdError.readLine()) != null) {
                error = s + "\n";
                System.out.println(s);
            }
        } catch (Exception e) {
            System.out.println("exception happened - here’s what I know: ");
            e.printStackTrace();
            System.exit(-1);
        }
        return output + error;
    }

    public static void main(String[] args) throws IOException{
        matlab m = new matlab();
        matlab.runScript(myMATLABScript);
    }
}

请你帮助我好吗?

4

4 回答 4

2

你在什么操作系统上运行?Matlab 应用程序在不同的操作系统上表现不同。我假设您在 Windows 上,因为即使您传递了“-nodesktop”,您也提到了“Matlab 窗口”。在 Windows 上,Matlab 本质上是一个 GUI 应用程序,stdin/stdout 是无用的。

尝试更改脚本以将其输出写入文件,该文件由环境变量、传递给 mymatlabscript 的函数参数或众所周知的路径确定。然后读入那个文件而不是 Matlab 的标准输出。仅使用“-r”开关,而不是“<”。这将可以跨操作系统移植,您可能会发现它更容易解析,因为输出文件不会有额外的 Matlab 命令窗口输出。

您可能还需要使用“-wait”开关来阻止,直到您的 Matlab 脚本完成。Windows 上的正常 Matlab.exe 调用将立即返回。确保您的脚本以“exit()”结尾,否则 Matlab 将无限期运行,在脚本完成后等待用户输入。

于 2009-05-13T03:41:49.150 回答
1

尝试调用Matlab 引擎而不是创建一个新的 matlab 进程(这里是另一个描述)。

于 2009-05-04T12:20:47.780 回答
1

matlabcontrol是一个 Java API,它允许您这样做。可以像使用 MATLAB 的命令行窗口一样使用 API,并且可以将结果作为 Java 对象检索。无需写入或读取输入/输出/错误流或外部文件。要运行您的脚本,您需要 MATLAB到您的脚本所在的目录,cd然后是脚本。要开始,请查看演练evalfeval

于 2011-07-08T23:05:40.420 回答
0

您是否有机会获得 MATLAB Builder JA 的许可证并且现在知道它?

http://www.mathworks.com/products/javabuilder/

这将是一种在 Java 中访问 MATLAB 函数结果的简单方法。

于 2012-03-12T03:03:30.490 回答