Java:完全禁用任何Swing不需要的哔声的方法?

时间:2010-02-15 14:30:35

标签: java swing beep

我正在使用Swing开发一个相当复杂的Java应用程序。

在某些情况下,如果没有任何用户干预,会发出不必要的哔哔声。没有崩溃,应用程序保持正常工作,我尊重EDT规则等。

然而在某些情况下可以听到一声嘟嘟声:我可能正在做一些愚蠢的事情来触发这种嘟嘟声,但无论如何,当用户不在时,导入数据时不会发生用户操作。

对于一个永远不会发出任何声音来配置它的Java应用程序来说,是否有可能通过为整个应用程序设置一个属性来说:“不要发出哔声”?

我一直在谷歌上搜索这个问题,我发现有同样问题但没有答案的人发来的消息:我发现有一些黑客说有一个已知的问题,JEditorPane并且使用putProperty("IgnoreCharsetDirective", Boolean.TRUE)是有助于减少不必要的哔哔声。然而,关于这个问题的信息非常稀缺。

这是一个真正的问题,因为应用程序用在计算机上需要声音的环境中,但这种Java应用程序发出的噪音是不可接受的。

2 个答案:

答案 0 :(得分:4)

您的问题在Java论坛上讨论:

// Write a custom toolkit
public class MyToolkit extends sun.awt.windows.WToolkit 
{
  public void beep() {
  }
}

// Set this property
System.setProperty("awt.toolkit", "MyPackage.MyToolkit");

NOTE:不鼓励使用此变通办法。您仍应尝试找到问题的根源。


编辑:删除了一个链接,因为Java论坛上的线程现在处于脱机状态。

答案 1 :(得分:0)

在Swing中,您需要覆盖LookAndFeel,如下所示:

UIManager.setLookAndFeel(new NimbusLookAndFeel() {

  @Override
  public void provideErrorFeedback(Component component) {

    // Your beep decision goes here

    // You want error feedback 
    super.provideErrorFeedback(component);

  }
});

通常,您的蜂鸣声决定会为您的应用程序引用某种外部配置/首选项标记。