Si vous contrôlez le déploiement de l'applet (c'est-à-dire la page Web hébergeant l'applet), vous pouvez écrire votre propre lanceur d'applets. Le lanceur fonctionne comme un wrapper qui fournit un environnement personnalisé à l'applet elle-même. Le lanceur instancie l'applet réelle et lui transmet des versions personnalisées de l'environnement de l'applet (AppletStub, AppletContext.) L'environnement personnalisé implémente AudioClip en tant qu'interface «ne rien faire».
Pour désactiver l'audio, vous pourriez remplacer le AppletContext comme ceci:
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() { }
}
Nous remplaçons également AppletStub, car c'est là le Applet obtient le AppletContext de
class CustomAppletStub implements AppletStub
{
AppletStub realStub;
public AppletContext getAppletContext()
{
return new CustomAppletContext(realStub.getAppletContext());
}
}
Et puis, votre lanceur :
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));
}
}
Il ressemble à beaucoup de code, mais c'est vraiment juste ew classes et surtout le câblage juste pour injecter une nouvelle implémentation DummyAudioClip.
HTH!
Cela ressemble plus à une question de configuration Linux qu'à une question de programmation. – Pool