アプレット(つまり、アプレットをホストしているWebページ)の展開を制御している場合は、独自のアプレットランチャーを作成できます。ランチャーは、実際のアプレットにカスタム環境を提供するラッパーとして機能します。ランチャーは実際のアプレットをインスタンス化し、カスタマイズされたバージョンのアプレット環境(AppletStub、AppletContext)を渡します。カスタム環境は、AudioClipを「何もしない」インターフェースとして実装します。
オーディオを無効にするには、次のようにAppletContextをオーバーライドできます。
class CustomAppletContext implements AppletContext
{
AppletContext realContext;
// most methods delegate to the real context, either directly, or with a little modification to hide the fact that we are using this launcher
public void setStatus(String status)
{
realContext.setStatus(status);
}
// override the getAudioClip to return a dummy clip
public AudioClip getAudioClip(URl url)
{
return new DummyAudioClip();
}
}
// An AudioClip implementation that does nothing
class DummyAudioClip implements AudioClip
{
public void loop() { }
public void play() { }
public void stop() { }
}
また、アプレットがAppletContextを取得する場所であるため、AppletStubをオーバーライドします。
class CustomAppletStub implements AppletStub
{
AppletStub realStub;
public AppletContext getAppletContext()
{
return new CustomAppletContext(realStub.getAppletContext());
}
}
そして、あなたのランチャー:
class AppletLauncher extends Applet
{
private Applet realApplet = new NoisyApplet();
// delegate most methods to the applet, but override the stub, to inject our
// AppletContext and AudioClip implementation
public void setAppletStub(AppletStub stub)
{
realApplet.setAppletStub(new CustomAppletStub(stub));
}
}
多くのコードのように見えますが、実際にはほんの数クラスであり、ほとんどの場合、新しいDummyAudioClip実装を挿入するためだけに配線されています。
HTH!