2016-12-28 3 views
0

"main()"メソッドを持つJavaクラスmatlabSMACがあります。Matlabから "main" Javaメソッドを呼び出して終了を待っています

このメソッドをMatlabから呼び出したいとします。しかし、私がそうするたびに、matlabスクリプトは実行を続け、main()メソッドが実行を終了するのを待たない。私は質問残念ながら同じ結果

matlabSMAC.main(args) 
javaMethod('main','matlabSMAC',args) 
javaMethodMT('main','matlabSMAC',args) 

で、いくつかの方法でメソッドを呼び出そうとしています

が行われるメソッドの実行を待つためにMATLABを強制する方法はありますスクリプトの実行を終了/終了/継続する前に?

ドキュメントの次のページの最後にこれに関する小さなコメントがあります。しかし、それはすべてのソリューションを指していません。

https://de.mathworks.com/help/matlab/matlab_external/invoking-methods-on-java-objects.html

ありがとうございました!

答えて

0

matlabにwaitforという関数を使用することができます。

waitforは、オブジェクトが削除または閉じられる前にmatlabスクリプトの実行を停止します。しかし、その前に、あなたのJavaメイン関数を参照するオブジェクトを作成する必要があります。

+0

これは良い考えのようです。ただし、MATLABオブジェクトでのみ動作します。カスタムJavaオブジェクトの代替手段があるかどうか知っていますか? –

+0

メソッドを使用する別の方法は、メソッドの実行可能なバージョンを作成し、[dos(java "yourProgram"](https://nl.mathworks.com/help/matlab/ref/dos.html?searchHighlight)で呼び出すことです。 =ドス&s_tid = doc_srchtitle)。ドス()はあまりにも終了ステータスを返します。あなたは、MATLABスクリプトで前方またはない処理するかどうかを確認するには、exitステータスを使用することができます。 – hsuyaa

+0

はどちらか動作していない。私はまた、java.lang.runtime.getruntimeを試してみました().exec(...)を実行して、出力が空になるまでInputStreamをチェックしてください....失敗しました これをコンピューティングクラスタで実行しようとしています。しかし、これをバッチモードで実行すると、トラブルが発生し、私の頭を傷つけるだけです。 –

1

Matlabは、呼び出されたJavaメソッドが完了するのを待ってから続行します。

そのmainメソッドが他のスレッドを起動してから戻ってくるのを見ることができます。 (これはJava GUIプログラムの通常の設計です)

main()は何をしていますか? matlabSMACクラスを使用すると、ワーカースレッドおよび/またはプロセスのすべてが完了するまでブロックする別のメソッドを提供できます。

関連する問題