J'ai référencé this previous question ainsi que d'autres sources, mais ne peut pas faire fonctionner CountDownLatch correctement. Arrière-plan: mainFrame crée un nouveau cadre appelé dataEntryFrame. Lorsque le bouton "Soumettre" de dataEntryFrame est cliqué, l'enregistrement ajouté à la base de données et dataEntryFrame est éliminé. MainFrame devrait effacer et recharger un jList qui affiche tous les enregistrements. Problème: Lorsque dataEntryFrame se charge, java se bloque, les composants dataEntryFrame ne se chargent jamais. Je ne peux pas dépasser cette partie ... puis, dans DataEntryFrame, CountDownLatch ne devrait être décrémenté qu'après avoir cliqué sur le bouton Soumettre, ajouter avec succès un enregistrement à une table de base de données et se disposer lui-même. Ou quand l'utilisateur clique annuler ...Java CountDownLatch utilisé pour jeter JFrame
code: De MainFrame
clearList();
CountDownLatch dataEntryDone = new CountDownLatch(1);
DataEntryFrame f = new DataEntryFrame(dataEntryDone);
Thread newThread = new Thread(f);
newThread.start();
dataEntryDone.await();
reLoadList();
code: De DataEntryFrame
public void run(){
initComponents();
loadOtherData();
this.setVisible(true);
}
void submit(){
addRecord();
this.dispose()
dataEntryDone.countDown();
}
Il n'y a pas assez d'informations pour dire à coup sûr, mais il semble que mainFrame a le fil de distribution d'événements verrouillé quand il attend le loquet. Pendant ce temps, votre code DataEntryFrame s'exécute en dehors du thread d'envoi d'événement Swing, ce qui est incorrect pour les objets Swing/AWT. Fournir plus de code serait utile. –