MIDIを作れるJavaアプレットを作っているのだ。
前回でCGIからのレスポンスがもらえるようになったのだ。
第10回でMIDIデータを演奏する方法を書きました。
しかしあのときはボタンで演奏したり止めたりするだけだったため、ページ移動などでアプレットが消えたときに演奏が止まらなくなっていました。ついこないだ気付きました。
「Applet.destroy()」にあるように、スレッドを使うアプレットでは終了時にちゃんとスレッドを停止しなければいけなかったのです。
そうでした。あまり意識していませんでしたが確かにMIDIの演奏は別スレッドで行われていたんです。
そういうわけで演奏停止等の処理を書くことになったのですが、今回はstart()で初期化を行っていたということもあるのでそれに対応してstop()に終了処理を書きます。
public void stop(){ // アプレットの実行を停止 if (sequencer!=null) { if (sequencer.isRunning()) { sequencer.stop(); // こうしないとブラウザで戻ったときなどに困る } sequencer.close(); } }
要点
- MIDIの演奏には専用のスレッドが作られる。
- スレッドは終了時に忘れず停止すべし。
- init()に対応するのはdestroy()。start()に対応するのはstop()。
今回のソースなのです。
細かい部分を沢山変更してます。