Java: способ полностью отключить любые нежелательные звуковые сигналы Swing? - PullRequest
4 голосов
/ 15 февраля 2010

Я работаю над довольно сложным Java-приложением, использующим Swing.

В некоторых случаях возникают нежелательные гудки без какого-либо вмешательства пользователя. Нет сбоев, приложение продолжает работать нормально, я соблюдаю правила EDT и т. Д.

Тем не менее, в некоторых случаях слышен звуковой сигнал: возможно, я делаю что-то глупое, вызывая этот звуковой сигнал, но в любом случае это не пользовательское действие, поскольку оно может произойти при импорте данных, когда пользователь отсутствует.

Возможно ли для приложения Java, которое никогда не должно издавать звук, настраивать его, скажем, путем установки свойства для всего приложения, которое говорит: "никогда не издают звуковой сигнал"?

Я гуглил по этой проблеме и нашел сообщение от людей, у которых была такая же проблема, но ответа не было: все, что я обнаружил, - это какой-то хак, который сказал, что была известная проблема с JEditorPane и что использование putProperty("IgnoreCharsetDirective", Boolean.TRUE) было полезно для сделать нежелательные гудки случаться реже. И все же информации по этому вопросу очень мало.

Это реальная проблема, потому что приложение используется в среде, где требуется звук на компьютере, но это приложение Java, излучающее шум, недопустимо.

Ответы [ 2 ]

4 голосов
/ 15 февраля 2010

Ваша проблема обсуждается на форуме 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 сейчас отключена.

0 голосов
/ 12 июня 2015

В Swing вам нужно переопределить LookAndFeel следующим образом:

UIManager.setLookAndFeel(new NimbusLookAndFeel() {

  @Override
  public void provideErrorFeedback(Component component) {

    // Your beep decision goes here

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

  }
});

Как правило, в вашем звуковом решении указывается какой-либо внешний флаг конфигурации / предпочтений для вашего приложения.

...