jrunscriptの使い勝手というよりも、Javaでスクリプト例外が発生した際のエラー報告の仕組みがもう少し何とかなれば(特にエラーの発生したスクリプトの行番号)...。
developerWorks Japan: 今まで知らなかった 5 つの事項: Java スクリプト API
「注: このツールは試験的なものであり、将来の JDK のバージョンでは利用できなくなる可能性があります。」
JDK(TM) 6 ドキュメント: jrunscript - コマンド行スクリプトシェル
2010-09-05
2010-08-14
今さらyoutubeに連続再生が追加されていたことを知る
サムネイルをクリックしたはずが、連続再生の「キュー」に突っ込まれていて慌てふためいた。
ユーチューブシャッフル(というサイトがあった)に興奮していたのが今は昔...。
ユーチューブシャッフル(というサイトがあった)に興奮していたのが今は昔...。
2010-07-18
Java 7: クロージャは無くとも、新しいファイルシステムAPIには期待している
スクリプト言語で書き捨てスクリプトを書く際、あのJava 1.1.x時代から続く古いファイルシステムAPIのせいで、ファイル操作が中心の「いかにもスクリプトっぽいこと」の実装に突っかかっていたのが、Java 7で少しでも改善されるとありがたい。
developerWorks Japan - Java 技術、IBM スタイル Java 技術の新たな時代 http://www.ibm.com/developerworks/jp/java/library/j-java7.html?ca=drs-jp
Java 6付属のRhinoで実装されたシェルっぽいもの(jrunscriptをそのまま起動すると確認できる)も、今回のバージョンでそれらしくなるのかしらん。
developerWorks Japan - Java 技術、IBM スタイル Java 技術の新たな時代 http://www.ibm.com/developerworks/jp/java/library/j-java7.html?ca=drs-jp
Java 6付属のRhinoで実装されたシェルっぽいもの(jrunscriptをそのまま起動すると確認できる)も、今回のバージョンでそれらしくなるのかしらん。
2010-05-05
RhinoでJavaのCanvasに描画したいと思った
さすがに描画処理(paintメソッド)のリスナーインタフェースは見当たらなかったので、Javaのソースファイルに以下のようなクラスを書いて、コンパイルしておく。
上のソースはbackGraphicsを初期化する処理が抜けていて、今回は古いやり方に従って描画メソッド(JPanelなのでpaintComponentメソッド)が初めて呼び出された時だけcreateImage()でオフスクリーンバッファ(と、そのGraphicsオブジェクト)を作成するようにした。
Javaは「Compatibleな」オフスクリーンバッファを作るメソッド、というのが幾つもあるのだけれど、いまいち最適な使い方が分からない。
/** 自作キャンバス */
public class MyCanvas extends JPanel {
/** オフスクリーンバッファに描画するためのオブジェクト */
private Graphics backGraphics;
/** キャンバスを作成する */
public MyCanvas() {
super(false); // JPanel提供のダブルバッファリングは使わない
}
/** オフスクリーンバッファに描画するためのオブジェクトを返す */
public Graphics getBackGraphics() {
return backGraphics;
}
//...以下略
// backGraphicsを初期化する処理が必要
}後は、Rhinoのスクリプトでオフスクリーンバッファへ描画してから repaint() で自作キャンバスを再描画する。上のソースはbackGraphicsを初期化する処理が抜けていて、今回は古いやり方に従って描画メソッド(JPanelなのでpaintComponentメソッド)が初めて呼び出された時だけcreateImage()でオフスクリーンバッファ(と、そのGraphicsオブジェクト)を作成するようにした。
Javaは「Compatibleな」オフスクリーンバッファを作るメソッド、というのが幾つもあるのだけれど、いまいち最適な使い方が分からない。
2010-04-29
Bloggerの新しい投稿エディタに変えたら改行設定が変わった
投稿エディタのヘルプを見たら、以前の改行設定ではなく「投稿オプションで設定」するように書いてあった...。
スクリプトを投稿に載せる都合上、自動改行されると困るケースの方が多いのでOFF。
スクリプトを投稿に載せる都合上、自動改行されると困るケースの方が多いのでOFF。
今さらRhinoのsync()について知った
引数として関数オブジェクトを渡すと、Javaでいうsynchronized(this)な関数に変換してくれる。
1. 書いてみる
1. 書いてみる
// よくある何とかHolder
var numHolder = function(initNum) {
this.out = java.lang.System.out;
this.num = initNum;
// 加算と減算
this.incNum = function() {
for (var i = 0; i < 10; i++) {
this.out.print(" inc:" + this.num++);
}
}
this.decNum = function() {
for (var i = 0; i < 10; i++) {
this.out.print(" dec:" + this.num--);
}
}
// sync()を使って同期関数を用意する
this.incNumSync = sync(this.incNum);
this.decNumSync = sync(this.decNum);
};
// Holder一個だけ作っておく
var theHolder = new numHolder(0);
// 別スレッドで、ひたすら加算する
var runner = new java.lang.Runnable() {
holder: theHolder,
run: function() {
this.holder.incNum();
// *sync()を使う場合*
//this.holder.incNumSync();
}
};
new java.lang.Thread(runner).start();
// メインスレッドで、ひたすら減算する
theHolder.decNum();
// *sync()を使う場合*
//theHolder.decNumSync();
2. sync()を使わない場合の動作js> load("synctest.js");
dec:0 dec:-1 dec:-2 dec:-3 dec:-4 dec:-5 dec:-6 inc:-7 in
:-3 inc:-2 inc:-1 inc:0 inc:1 inc:2 dec:3 dec:2 dec:1js>
3. sync()を使う場合の動作js> load("synctest.js");
dec:0 dec:-1 dec:-2 dec:-3 dec:-4 dec:-5 dec:-6 dec:-7 dec:-8
c:-9 inc:-8 inc:-7 inc:-6 inc:-5 inc:-4 inc:-3 inc:-2 inc:-1js>
登録:
投稿 (Atom)