2010-02-15 10 views
4

Je travaille sur une application Java assez complexe en utilisant Swing.Java: moyen de désactiver complètement les bips Swing indésirables?

Dans certains cas, des bips sont émis sans intervention de l'utilisateur. Dans certains cas, un bip se fait entendre: je fais peut-être quelque chose de stupide qui déclenche ce bip mais en aucun cas ce n'est pas une action de l'utilisateur car cela peut arriver lors de l'importation de données, lorsque l'utilisateur est absent.

Est-il possible, pour une application Java qui ne devrait jamais émettre de son de le configurer, de définir une propriété pour l'ensemble de l'application qui dit: "ne jamais émettre de bip"? J'ai été Google pour ce problème et j'ai trouvé le message par des personnes ayant le même problème mais aucune réponse: tout ce que j'ai trouvé était un hack disant qu'il y avait un problème connu avec JEditorPane et que l'utilisation d'un putProperty("IgnoreCharsetDirective", Boolean.TRUE) a été utile pour faire les bips indésirables se produisent moins souvent. Pourtant, l'information est très rare sur le sujet.

C'est un vrai problème car l'application est utilisée dans un environnement où le son est nécessaire sur l'ordinateur, mais cette application Java émettant du bruit est inacceptable.

+0

Que faites-vous lorsque vous recevez un "bip" dans l'application? Cela pourrait aider à mieux cibler les réponses. (De plus, le système d'exploitation peut émettre des bips en fonction de la situation.) – JasCav

+0

@Jason: Les données financières sont importées en temps réel et l'interface utilisateur (une interface utilisateur complexe) est mise à jour mais les utilisateurs ne font rien. J'aimerais vraiment savoir s'il existe un moyen de désactiver, à l'échelle de l'application, le son d'une application Java dont nous savons pertinemment qu'elle ne devrait jamais émettre de son. Je suis à peu près sûr que c'est un problème Java parce qu'il n'y a pas une seule autre application émettant des bips indésirables. Une fois de plus, il existe un problème connu concernant JEditorPane et un hack setProperty. Ceci est lié à Swing, pas à l'OS, je suis assez sûr. – LowLevelAbstraction

+0

@mre: super lien. Je comprends cela mais encore, ce serait génial d'avoir un moyen de spécifier "cette application ne devrait jamais émettre de son". – LowLevelAbstraction

Répondre

4

Votre problème est discuté sur le forum 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: L'utilisation de cette solution de contournement est déconseillée. Vous devriez toujours essayer de trouver la racine du problème.


Edit: Suppression d'un lien, puisque le fil sur Java Forum est maintenant déconnecté.

+3

Pourriez-vous imprimer une trace de pile à partir du bip() pour trouver la source du problème? par exemple. '(nouvelle exception()). printStackTrace();' –

0

In Swing vous devez remplacer le LookAndFeel comme suit:

UIManager.setLookAndFeel(new NimbusLookAndFeel() { 

    @Override 
    public void provideErrorFeedback(Component component) { 

    // Your beep decision goes here 

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

    } 
}); 

Généralement votre décision bip renverrait une sorte de drapeau configuration/préférences externe pour votre application.