Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java命令Matlab_Java_Matlab - Fatal编程技术网

用Java命令Matlab

用Java命令Matlab,java,matlab,Java,Matlab,我尝试使用Matlab来: 创建一个新的Java进程来生成Matlab的第二个实例,然后 从第一个Matlab实例向第二个Matlab实例写入命令 代码似乎运行良好,但在第二个Matlab实例的命令窗口中没有看到任何显示。我做错了什么 我尝试过的代码是: % Start a 2nd instance of Matlab MatlabProcess = java.lang.Runtime.getRuntime().exec('matlab -nosplash'); pause(20); % I d

我尝试使用Matlab来:

  • 创建一个新的Java进程来生成Matlab的第二个实例,然后

  • 从第一个Matlab实例向第二个Matlab实例写入命令

  • 代码似乎运行良好,但在第二个Matlab实例的命令窗口中没有看到任何显示。我做错了什么

    我尝试过的代码是:

    % Start a 2nd instance of Matlab
    MatlabProcess = java.lang.Runtime.getRuntime().exec('matlab -nosplash');
    pause(20); % I don't know if this pause is really needed.
    
    % Set up a buffered Java stream writer to write to the new Matlab Process
    OutputStream            = MatlabProcess.getOutputStream();
    OutputStreamWriter      = java.io.OutputStreamWriter(OutputStream);
    OutputBufferedWriter    = java.io.BufferedWriter(OutputStreamWriter);
    
    % Write some text to the 2nd Matlab Instance
    OutputBufferedWriter.write('pi\n');
    OutputBufferedWriter.flush();
    

    我相信你会得到一个命令窗口,或者使用stdin/stdout,而不是两者都有,这取决于matlab进程是否是交互式的。

    我相信你会得到一个命令窗口,或者使用stdin/stdout,而不是两者都有,取决于matlab进程是否是交互式的。

    当我启动seconds matlab实例时:MatlabProcess=java.lang.Runtime.getRuntime().exec('matlab-nosplash-nodesktop');然后命令窗口没有启动,我可以通过getInputStream()从生成的Matlab实例读取输出。但是,我仍然无法使用上述代码写入输出流。代码似乎执行正常,但似乎没有写入Matlab的第二个实例。@Greg:您没有写入输出流,而是写入输入流(表示子进程的stdin)。等等,不,Java文档都搞砸了。谢谢你的回复。我对Java相当陌生,对编写InputStream的想法感到困惑。据我所知,Java InputStreams没有write()方法。Java OutputStreams确实是这样的:我一定是遗漏了什么,但我很难理解它是什么。@Greg:通常,当你启动一个子进程时,你会得到它的
    stdin
    的句柄,你会对它进行写操作,而子进程会读取它。对于子进程
    stdout
    ,反之亦然。并在此处使用该术语:“未能及时写入子流程的输入流或读取子流程的输出流可能会导致子流程阻塞”。但稍后“获取子流程的输入流。该流获取从该流程对象表示的流程的标准输出流管道传输的数据”。这真是一团糟。“正确”的做法是使用一个方法
    getStdin()
    ,该方法返回一个
    OutputStream
    getStdout()
    将返回一个
    InputStream
    ,这样就不会有任何混淆了。当我用以下命令启动秒Matlab实例时:MatlabProcess=java.lang.Runtime.getRuntime().exec('matlab-nosplash-nodesktop');然后命令窗口没有启动,我可以通过getInputStream()读取生成的matlab实例的输出。但我仍然无法使用上述代码写入输出流。代码似乎执行正常,但似乎没有写入Matlab的第二个实例。@Greg:您没有写入输出流,而是写入输入流(这意味着子进程的stdin).等等,不,Java文档都搞砸了。谢谢你的回复。我对Java相当陌生,对写入InputStream的想法感到困惑。据我所知,Java InputStreams没有write()方法。Java OutputStreams会这样做:我肯定遗漏了什么,但我很难理解它是什么。@Greg:通常,当你启动一个子进程时,你会得到它的
    stdin
    的句柄,你会将它写入子进程,而子进程则会读取它。反之亦然,对于子进程
    stdout
    。然后使用这个终端ogy此处:“未能及时写入子流程的输入流或读取子流程的输出流可能会导致子流程阻塞”。但稍后“获取子流程的输入流。该流从该流程对象表示的流程的标准输出流获取管道数据”。这是一团乱。“右”事情将是有一个方法
    getStdin()
    ,它返回一个
    OutputStream
    ,而
    getStdout()
    将返回一个
    InputStream
    ,这样就不会产生混淆。