JavaWebStartの理解
またJavaWebStartを理解するために、色々調査をしておりましたが、面白いですね。
- "javaws.exe [URL/JNLPFile]"を実行するとjavaw.exe(1)でJavaVMがデフォルトで起動する。
- JNLPファイルにHeapサイズ指定等があると、今の実行しているjavaw.exe(1)から指定されたオプションを指定したjavaw.exe(2)を起動する。
- javaw.exe(1)はexitされる。
- javaw.exe(2)はThreadを起こしJavaWebStart上で動くアプリのメインをinvokeする。
自分自身を起動しなおすという発想面白いですね。
JavaWebStartに問題点がありました。それはアプリから出力されたSystem.outとSystem.errを出力するコンソールです。"com.sun.javaws.Console"クラスは、javawsのコンソール画面です。"java.io.OutputStream"をオーバライドしていて、自分自身を"java.io.PrintStream"として登録し、System.outとSystem.errの出力先にしています。
- バッファリングせずに出力しているのはなぜ?
- コンソールを表示しないことにしているのにConsoleをインスタンスするのはなぜ?(表示していないだけ・・・)
そのため、アプリ側で多量に出力されるSystem.outまたはSystem.errを出力するのには、性能的には良くなくかつ、下手をするとOutOfMemoryで異常終了するという自体に陥ります。