Wolfram Research製品ご購入サービスとリソース会社概要その他のWolframサイト
webMathematica Technical FAQs Services & Resources / webMathematica
-----
 /
すべてのプラットフォーム
*Mathematica
*Network Mathematica
*webMathematica
*gridMathematica
*Personal Grid Edition
*Wolfram Workbench
*Wolfram Education Group
*アプリケーションパッケージ
*Mathematica for Students
*Mathematica CalcCenter
*Publicon
*A New Kind of Science Explorer
*Mathematical Explorer
*Mathematica Teacher's Edition
*Calculus WIZ
*Mathematica Player
*このページについてのお問い合せ
*このページを印刷
*このページをメールで送信
*ご意見・ご提案
*
ニュースレターのご登録

Javaイベントハンドラからの呼出しでMathematica がハングするのはなぜでしょうか.


JavaユーザインターフェースのスレッドからMathematica を呼び出すときは常に,StdLink.requestTransaction()を呼び出して,続行するための許可を待たなければなりません.J/Link ユーザガイドの1.2.15「インストール可能なJavaクラスを書く」の「イベントハンドラコードを書く」にある関連事項をご参照ください.

安全を期するために,常に以下のイディオムを使うとよいでしょう.

StdLink.requestTransaction(); synchronized (ml) { ... use the link ... }

Mathematica を呼び出すJavaのコードでは,Mathematica を呼び出すクラスでこれを使うことをお勧めします.

StdLink.requestTransaction()が必要なのは「JavaがMathematica からInstallJavaによって起動されていて,このときユーザがMathematica からJavaを呼び出している最中ではない」という場合のみです.

このような条件が満たされる典型的な例は,JavaでのユーザアクションがMathematica の呼出しを引き起す場合です.

しかし,StdLink.requestTransaction()はこのような条件が満たされない場合でも安全に呼出しを行うことができます.言い換えるなら,これは不要な場合にはノーオペレーション命令となるのです.

このため,いろいろな状況で呼ばれる可能性があるために非常に一般的でなければならないコードの場合には,常に上記のイディオムを使ってStdLink.requestTransaction()を呼び出し,続けてリンクをロックするべきでしょう.




 © 2008 Wolfram Research, Inc.  Terms of Use  Privacy Policy | [en] [kr]