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