2008-08-31

jrunscriptでGUIスクリプトを起動してみて気づいたこと

  1. jrunscriptのバッチモード(-fオプション)でAWTやSwingのウィンドウを表示するスクリプトファイルを起動した場合、ウィンドウが一瞬だけ表示されて終了してしまう。
  2. スクリプトの最後にjava.lang.Thread.currentThread().sleep(1000);を付け足すと、スレッドを待機させている間はウィンドウが表示された。
  3. どうやらスクリプトを処理するメインスレッドが、スクリプトを読み終えた時点で(GUIのスレッドが生きていても)exitしているように見える。
  4. そこで、wait-notifyの組合せを使って、ウィンドウがクローズされるまでメインスレッドを待機させることを思い付いた。
  5. Rhinoで同期処理を上手くやる方法はあったっけ?
  6. "バッチモード"という位なので、これはこれで正しいのかもしれない、と勝手に自分を納得させる。
  7. あえなく完。
  8. Rhino組み込みのsync関数に気付き、sync(function() {this.wait();})の返す同期化された関数を使ってみる。
  9. wait関数が見つからないとか言われた...。確かにtypeof this.waitはundefinedだった。
  10. やっぱり完。
  11. スクリプトの最後に while (frame.isDisplayable()) {java.lang.Thread.currentThread().sleep(1000);} を付けたところ、GUI側でウィンドウクローズ時にちゃんとdispose()してれば想定通りに動く。
  12. 何か納得いかないものの完。
ちなみに、対話モードでload('GUIスクリプトファイル名');を使うなら問題なし。

0 件のコメント:

コメントを投稿