Nous aimerions avoir une trace dans nos journaux d'application de ces exceptions - par défaut, Java les affiche simplement dans la console.Comment puis-je attraper des exceptions de threads AWT en Java?
Répondre
Il existe une distinction entre les exceptions non interceptées dans l'EDT et en dehors de l'EDT.
Another question has a solution for both mais si vous voulez juste la partie HAE mâché ...
class AWTExceptionHandler {
public void handle(Throwable t) {
try {
// insert your exception handling code here
// or do nothing to make it go away
} catch (Throwable t) {
// don't let the exception get thrown out, will cause infinite looping!
}
}
public static void registerExceptionHandler() {
System.setProperty('sun.awt.exception.handler', AWTExceptionHandler.class.getName())
}
}
Il y a deux façons:
- /* Installez un Thread.UncaughtExceptionHandler sur l'EDT */
- Définir une propriété système: System.setProperty ("sun.awt.exception.handler", MyExceptionHandler.class.getName());
Je ne sais pas si ce dernier fonctionne sur des jvms non SUN.
-
En effet, le premier n'est pas correct, il est seulement un mécanisme de détection d'un fil écrasé.
L'utilisation de Thread.UncaufhtExceptionHandler n'attrape pas les exceptions EDT. La classe EDT attrape tous les jetables et les imprime plutôt que de les laisser dérouler tout le fil. – shemnon
Il vous manque également des détails sur ce qui est nécessaire dans la deuxième option, la classe MyExceptionHandler doit avoir une méthode d'instance handle (Throwable) accessible et un constructeur no-args accessible. – shemnon
Un peu plus de shemnon de la anwer:
La première fois une RuntimeException uncaught (ou erreur) se produit dans la EDT recherche la propriété "sun.awt.exception.handler" et tente de charger la classe associée à la propriété. EDT a besoin de la classe Handler pour avoir un constructeur par défaut, sinon EDT ne l'utilisera pas.
Si vous devez apporter un peu plus de dynamique dans l'histoire de la manipulation, vous devez le faire avec des opérations statiques, car la classe est instanciée par l'EDT et n'a donc aucune chance d'accéder à d'autres ressources statiques. Voici le code du gestionnaire d'exception de notre framework Swing que nous utilisons. Il a été écrit pour Java 1.4 et il a fonctionné assez bien là:
public class AwtExceptionHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(AwtExceptionHandler.class);
private static List exceptionHandlerList = new LinkedList();
/**
* WARNING: Don't change the signature of this method!
*/
public void handle(Throwable throwable) {
if (exceptionHandlerList.isEmpty()) {
LOGGER.error("Uncatched Throwable detected", throwable);
} else {
delegate(new ExceptionEvent(throwable));
}
}
private void delegate(ExceptionEvent event) {
for (Iterator handlerIterator = exceptionHandlerList.iterator(); handlerIterator.hasNext();) {
IExceptionHandler handler = (IExceptionHandler) handlerIterator.next();
try {
handler.handleException(event);
if (event.isConsumed()) {
break;
}
} catch (Throwable e) {
LOGGER.error("Error while running exception handler: " + handler, e);
}
}
}
public static void addErrorHandler(IExceptionHandler exceptionHandler) {
exceptionHandlerList.add(exceptionHandler);
}
public static void removeErrorHandler(IExceptionHandler exceptionHandler) {
exceptionHandlerList.remove(exceptionHandler);
}
}
Espérons que cela aide.
Depuis Java 7, vous devez le faire différemment car le hack sun.awt.exception.handler
ne fonctionne plus.
Here is the solution (à partir de Uncaught AWT Exceptions in Java 7).
// Regular Exception
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());
// EDT Exception
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
// We are in the event dispatching thread
Thread.currentThread().setUncaughtExceptionHandler(new ExceptionHandler());
}
});
- 1. Comment attraper des exceptions en javascript?
- 2. Attraper des exceptions par défaut en C++
- 3. Comment attraper des exceptions de processus en C#
- 4. attraper des exceptions dans le balisage asp.net
- 5. Attraper les exceptions polymorphically
- 6. comment et où attraper des exceptions dans une application j2ee
- 7. Attraper des exceptions d'applet dans Firefox
- 8. Comment attraper toutes les exceptions d'un WebService?
- 9. Travailler avec des cadres et Java AWT
- 10. convertir l'applet java awt en flash/flex
- 11. Attraper des exceptions de la liste d'initialisation d'un constructeur
- 12. threads en Java
- 13. exceptions en java cochés
- 14. Catching exceptions in Java
- 15. Clustering utilisant des threads en Java
- 16. Attraper des exceptions avec tomcat et une servlet
- 17. occupé threads d'attente en Java
- 18. Comment arrêter les threads en Java?
- 19. Get Visual Studio pour lancer des exceptions sur les threads
- 20. Threads Java
- 21. Hébergement des contrôles ActiveX sur un cadre Java AWT?
- 22. Comment puis-je 'globalement' attraper des exceptions lancées dans des instances d'objet?
- 23. Effet de bordure de verre Vista dans Java Swing/AWT
- 24. Java: synchronisation des threads sur plusieurs serveurs
- 25. Comment créer des threads démon?
- 26. Comment attraper des exceptions sur un autre thread sans affecter le débogueur
- 27. Java Gestion des exceptions dans les "événements"
- 28. Java gestion des exceptions - exception personnalisée
- 29. java rmi exceptions
- 30. Utilisation des threads en C++
Pas besoin d'attraper jetable. Il n'y aura pas de boucle infinie. java.awt.EventDispatchThread.handleException capture toutes les exceptions pour vous. –
Il est dit 'classs AWTExceptionHandler' –