2009-05-26 5 views
0

J'ai le contrôle d'une petite partie d'une application construite sur Eclipse, et j'ai un problème pour créer un DefaultCellEditor. Le code utilise en fait une sous-classe de DefaultCellEditor, mais je peux recréer le problème en utilisant DefaultCellEditor, donc c'est ce que je vais demander, en espérant qu'il va résoudre le problème avec la classe réelle. J'ai essayé ceci avec JDK 1.5 et 1.6, et obtiens le même comportement dans les deux.L'application se bloque en appelant le constructeur DefaultCellEditor

Le problème se produit lorsque le constructeur de DefaultCellEditor est appelé:

log.debug("Trying construction."); 
currentCellEditor = new DefaultCellEditor(new JTextField()); 
log.debug("Constructed OK."); 

Lorsque ce code fonctionne, peut-être 20% du temps, les blocages d'applications, et l'unité centrale de traitement est fixé à 100% - On dirait qu'il ya une boucle infinie là-bas quelque part, mais je ne sais pas où. La première ligne de journal est imprimée, mais la seconde ne l'est pas.

J'ai essayé d'effectuer une copie de la classe DefaultCellEditor et d'insérer des instructions System.out.println pour voir si le problème se produit; Pendant les périodes où le code s'exécute correctement, toutes mes instructions de débogage sont imprimées, mais lorsqu'elles ne s'exécutent pas correctement, aucune des instructions n'est imprimée, comme si le blocage se produisait avant l'appel du constructeur. Des idées sur ce qui pourrait arriver?

+2

Vous pouvez effectuer un vidage de thread (contrôle-pause sous Windows) et voir où votre thread est en cours d'exécution ou en attente. –

+1

Comme toujours, assurez-vous que vous utilisez l'AWT EDT. –

Répondre

0

Les deux commentaires sur la question nous ont aidé. J'ai été en mesure d'utiliser le vidage de fil et comprendre ce qui causait la boucle (j'ai fini par utiliser StackTrace). Mon autre problème est que pendant que j'étais sur l'EDT plus tôt, au moment où ce code fonctionne réellement, ce n'est plus sur l'EDT - donc maintenant je dois dépister cela, mais certains tests tôt indiquent que mettre ceci sur l'EDT peut résoudre le problème. Merci!