2010-02-15 6 views
4

Я работаю над довольно сложным Java-приложением с использованием Swing.Java: способ полностью отключить любые звуковые сигналы Swing?

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

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

Возможно, для приложения Java, которое никогда не должно издавать звук для его настройки, скажем, установив свойство для всего приложения, которое говорит: «dont« когда-либо издавал звуковой сигнал »?

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

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

+0

Что вы делаете, когда получаете приказ «звуковой сигнал» в приложении? Это может помочь лучше сфокусировать ответы. (Кроме того, ОС может делать звуковые сигналы в зависимости от ситуации.) – JasCav

+0

@ Джейсон: Финансовые данные импортируются в режиме реального времени, а пользовательский интерфейс (комплексный интерфейс) обновляется, но пользователи ничего не делают. Мне очень хотелось узнать, есть ли способ отключить звук приложения для Java-приложения, который, как мы знаем, никогда не должен издавать звук. Я уверен, что это проблема Java, потому что нет ни одного другого приложения, излучающего нежелательные звуковые сигналы. Еще раз, есть проблема с проблемой JEditorPane и взлома setProperty. Это связано с Swing, а не с ОС, я уверен. – LowLevelAbstraction

+0

@mre: отличная ссылка. Я понимаю, что, но все же было бы здорово иметь способ указать «это приложение никогда не должно издавать звук». – LowLevelAbstraction

ответ

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: Использование этого метода обхода не рекомендуется. Вы все равно должны попытаться найти корень проблемы.


Edit: Удалены ссылку, так как нить на Java форуме Сейчас на форуме.

+3

Не могли бы вы напечатать трассировку стека из звукового сигнала(), чтобы найти источник проблемы? например '(новое исключение()). printStackTrace();' –

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); 

    } 
}); 

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