init: Synchro Tâches

This commit is contained in:
2026-03-06 13:39:33 +01:00
parent 4beefa3e0d
commit a2166b74e1

View File

@@ -7,6 +7,7 @@ import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import java.awt.event.KeyListener;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.Timer; import javax.swing.Timer;
public class Jeu implements KeyListener, ActionListener{ public class Jeu implements KeyListener, ActionListener{
@@ -128,6 +129,8 @@ public class Jeu implements KeyListener, ActionListener{
fenetre.pack(); fenetre.pack();
fenetre.setLocation(100, 100); fenetre.setLocation(100, 100);
fenetre.setVisible(true); fenetre.setVisible(true);
// s'assurer que l'écran reçoit le focus clavier
ecran.requestFocusInWindow();
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 🔹 Création du bouton Voir Scores // 🔹 Création du bouton Voir Scores
@@ -168,25 +171,36 @@ public class Jeu implements KeyListener, ActionListener{
ecran.setLayout(null); ecran.setLayout(null);
ecran.add(boutonScores); ecran.add(boutonScores);
// Création du timer
horloge = new Timer(40, this);
//propriétés dont on aura besoin pour utiliser NiveauxDataConnect //propriétés dont on aura besoin pour utiliser NiveauxDataConnect
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
// Initialisation de la connexion aux niveaux HORS de l'EDT (arrière-plan) // C'est ici qu'on appelle NiveauxDataConnect pour initialiser la connexion à la base de données des niveaux
// pour éviter de bloquer l'interface lors d'opérations disque/BDD // On fera une synchronisation pour éviter que le jeu se fige
// pendant l'initialisation de la base de données, qui peut prendre un peu de temps
// On utilise un thread synchrone pour ne pas bloquer le thread principal du jeu
//--------------------------------------------------------------------------------
// Initialisation de la BDD dans un thread séparé ;
// démarrer le timer quoiqu'il arrive pour ne pas figer l'UI
new Thread(() -> { new Thread(() -> {
try { try {
NiveauxDataConnect niveau = new NiveauxDataConnect(); //NiveauxDataConnect niveau = new NiveauxDataConnect();
System.out.println("NiveauxDataConnect initialisé en arrière-plan"); System.out.println("Connexion réussie !!!");
} catch (ClassNotFoundException ex) { throw new RuntimeException("Test d'erreur de connexion à la base de données");
ex.printStackTrace(); } catch (Exception ex) {
} catch (RuntimeException ex) {
ex.printStackTrace(); ex.printStackTrace();
System.err.println("Erreur lors de l'initialisation de la connexion à la base de données : " + ex.getMessage());
} finally {
// démarrer le timer sur l'EDT même si l'initialisation BDD a échoué
SwingUtilities.invokeLater(() -> {
if (horloge != null && !horloge.isRunning()) {
horloge.start();
}
});
} }
}).start(); }).start();
// Démarrage du timer, qui rythmera l'animation
horloge = new Timer(40, this);
horloge.start();
// A FAIRE : // A FAIRE :
// donner la couleur des 2 demi-cercles, par exemple : demiCerleArriere.setCouleur(new Color(0.8f,0.0f,0.0f)); // donner la couleur des 2 demi-cercles, par exemple : demiCerleArriere.setCouleur(new Color(0.8f,0.0f,0.0f));
@@ -220,8 +234,7 @@ public class Jeu implements KeyListener, ActionListener{
this.ecran.partiePerdue = true; // 2. Signaler à l'écran this.ecran.partiePerdue = true; // 2. Signaler à l'écran
this.ecran.repaint(); // 3. Forcer l'affichage du texte this.ecran.repaint(); // 3. Forcer l'affichage du texte
// Enregistrer le score hors de l'EDT pour ne pas bloquer l'UI GestionBDD.ajouterScore((int)this.score);// enregistrement du score dans la base de donne
new Thread(() -> GestionBDD.ajouterScore((int)this.score)).start();// enregistrement du score dans la base de donne
} }
} }