gpt4 book ai didi

java - Java Applet 中的静音

转载 作者:搜寻专家 更新时间:2023-10-31 19:50:54 24 4
gpt4 key购买 nike

我使用 Java 小程序,它会产生不想要的声音。小程序中的静音选项缺失,无法重写源代码。我想听到其他(非 JVM)应用程序的声音。如何在不禁用此 Java applet(或 JVM)声音输出的情况下抑制它?

我正在使用 Ubuntu 9.10、jre1.6.0_18 和 Mozilla FF 3.5.8。

更新:

  1. “声音首选项 -> 应用程序”中缺少 Java 小程序,因为声音太短(“哔”等)。
  2. 当其他应用程序产生声音(.mp3、.ogg 音乐)时,java applet 不会。

最佳答案

如果您控制小程序的部署(即托管小程序的网页),您可以编写自己的小程序启动器。启动器用作包装器,为实际小程序提供自定义环境。启动器实例化真正的小程序并将小程序环境的自定义版本(AppletStub、AppletContext)传递给它。自定义环境将 AudioClip 实现为“不执行任何操作”的接口(interface)。

要禁用音频,您可以像这样覆盖 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));
}
}

它看起来有很多代码,但实际上只是几个类,大部分只是为了注入(inject)一个新的 DummyAudioClip 实现而进行的连接。

喂!

关于java - Java Applet 中的静音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2300773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com