0

プロジェクトで matlab を使用しており、Java で matlab の結果を取得したいと考えています。結果が欲しいだけ。Javaのmatlabで作成したファイルの結果を取得したい。私はこのコードを使用しますが、matlab windo で結果が得られます。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

どのOSで実行していますか? Matlab アプリは、OS によって動作が異なります。「-nodesktop」を渡しているにもかかわらず、「Matlab Window」に言及しているため、Windowsを使用していると思います。Windows では、Matlab は本質的に GUI アプリであり、stdin/stdout は役に立ちません。

環境変数、mymatlabscript に渡す関数引数、または既知のパスによって決定されるファイルに出力を書き込むように、スクリプトを変更してみてください。次に、Matlab の stdout の代わりにそのファイルを読み込みます。「<」ではなく、「-r」スイッチのみを使用してください。これは OS 間で移植可能であり、出力ファイルに余分な Matlab コマンド ウィンドウ出力が含まれないため、解析が容易になる場合があります。

Matlab スクリプトが完了するまでブロックするには、「-wait」スイッチを使用する必要がある場合もあります。Windows での通常の Matlab.exe の呼び出しは、すぐに戻ります。スクリプトが「exit()」で終了していることを確認してください。そうしないと、Matlab が無期限に実行され、スクリプトの終了後にユーザーの入力を待機します。

于 2009-05-13T03:41:49.150 に答える
1

新しい matlab プロセスを作成する代わりに、 Matlab エンジンを呼び出してみてください(別の説明があります)。

于 2009-05-04T12:20:47.780 に答える
1

matlabcontrolは、まさにそれを可能にする Java API です。この API は、MATLAB のコマンド ウィンドウを操作しているかのように使用でき、結果を Java オブジェクトとして取得できます。入力/出力/エラー ストリームまたは外部ファイルを読み書きする必要はありません。スクリプトを実行するには、MATLABcdをスクリプトがあるディレクトリに移動してから、evalまたはスクリプトを実行しますfeval。開始するには、ウォークスルーをご覧ください。

于 2011-07-08T23:05:40.420 に答える
0

ひょっとして、MATLAB Builder JA のライセンスを持っていて、それを知っていますか?

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

これは、Java で MATLAB 関数の結果にアクセスする簡単な方法です。

于 2012-03-12T03:03:30.490 に答える