2009-05-02 6 views
0

私は自分のプロジェクトでmatlabを使用しています。私はjavaでmatlabの結果を取得したいと思います。ちょうど結果が欲しい。 私はjavaのmatlabでファイルの結果を取得したいと思います。 私はこのコードを使用しますが、matlab windoの結果を私に与えて、Javaでのみ結果を取得したいだけです。 これはコードですjavaでmatlabの結果を取得

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); 
    } 
} 

私を助けてくれますか?

+0

これまでに既にこれを尋ねたようです:http://stackoverflow.com/questions/7949​​97/how-do-i-get-results-from-matlab-in-javaこの追加のコードを使用して他の質問を更新し、この質問を削除する必要があります。 – gnovice

答えて

1

新しいmatlabプロセス(here's別の説明)を作成する代わりに、Matlab Engineを呼び出してみてください。

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が無期限に実行され、スクリプトの終了後にユーザーの入力を待っています。

1

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

関連する問題