標準エラー出力
メテオスもどき作り始めました。
eclipseが重いのとアプレットビューアでは実際的な動作テストができないことから、ブラウザ上で効率よくデバッグできる方法を考えていました。
ブラウザ上でのデバッグの大きな問題点としては、ミディビのときにJavaのクラスローダキャッシュのせいでアプレットが最新版に更新されないという問題に直面していたので、今回はそのことを中心に対策しました。
まず考えたのが、URL単位でキャッシュを保存していることは知っていたので、JARファイルを返すアドレスの後ろに毎回異なる文字列をつけるというものでしたが、後半の文字列を無視して同じファイルと認識したり、ファイルとは別のものと認識してエラーを起こしたりしたため失敗でした。
そして最終的に考えたのが、ミディビを作るときに行っていた、ディレクトリ名を変える方法を自動化するやり方です。
要するに、アプレットをテストするページにアクセスすると、PHPスクリプトによって毎回違う値でディレクトリを作り、その場所にJARファイルのコピーを置くというもので、これは非常にうまく働いてくれました。
そうすると欲が出てくるもので、どうせ常に最新版に保つんだからコンパイルもアクセス時に同時にしてしまおうということになりました。
それはそれで、コンパイルするだけならバッチファイルに入れていたものをPHPに移植するだけで簡単だったのですが、ここで思わぬ問題が出ました。
エラーメッセージが出力されなかったんです。
バッチファイルでコンパイルしていたときも、コマンドプロンプトが瞬時に消えてしまっていたために見えなかったのですが、今回は標準出力をページに表示するなりファイルに出力するなりすれば簡単に見られると思っていました。
ところが、エラーの出力先は標準出力ではなく標準エラー出力であったため、標準出力には何もないという状態になっていたのでした。
最終的に、「2>&1」とすることで、標準エラー出力2に出たエラーを標準出力1にリダイレクトして、その結果をPHPで拾うことで無事表示させることができました。
そうそう、明日から二泊三日で旅行に行きます。
海で泳ぎます。