Если вы контролируете развертывание апплета (то есть веб-страницу, на которой размещен апплет), вы можете написать свой собственный модуль запуска апплета. Модуль запуска функционирует как оболочка, которая обеспечивает пользовательскую среду для реального апплета. Модуль запуска создает экземпляр реального апплета и передает ему настроенные версии среды апплета (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() { }
}
Мы также переопределяем AppletStub, поскольку именно здесь Applet получает AppletContext от
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.
НТН!