diff --git a/linea/linea/Jeu.java b/linea/linea/Jeu.java index b8558ff..190b380 100644 --- a/linea/linea/Jeu.java +++ b/linea/linea/Jeu.java @@ -7,6 +7,7 @@ import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JLabel; +import javax.swing.SwingUtilities; import javax.swing.Timer; public class Jeu implements KeyListener, ActionListener{ @@ -128,6 +129,8 @@ public class Jeu implements KeyListener, ActionListener{ fenetre.pack(); fenetre.setLocation(100, 100); fenetre.setVisible(true); + // s'assurer que l'écran reçoit le focus clavier + ecran.requestFocusInWindow(); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 🔹 Création du bouton Voir Scores @@ -168,25 +171,36 @@ public class Jeu implements KeyListener, ActionListener{ ecran.setLayout(null); ecran.add(boutonScores); + // Création du timer + horloge = new Timer(40, this); + //propriétés dont on aura besoin pour utiliser NiveauxDataConnect //--------------------------------------------------------------------------------- - // Initialisation de la connexion aux niveaux HORS de l'EDT (arrière-plan) - // pour éviter de bloquer l'interface lors d'opérations disque/BDD + // C'est ici qu'on appelle NiveauxDataConnect pour initialiser la connexion à la base de données des niveaux + // 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(() -> { try { - NiveauxDataConnect niveau = new NiveauxDataConnect(); - System.out.println("NiveauxDataConnect initialisé en arrière-plan"); - } catch (ClassNotFoundException ex) { - ex.printStackTrace(); - } catch (RuntimeException ex) { + //NiveauxDataConnect niveau = new NiveauxDataConnect(); + System.out.println("Connexion réussie !!!"); + throw new RuntimeException("Test d'erreur de connexion à la base de données"); + } catch (Exception ex) { 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(); - - // Démarrage du timer, qui rythmera l'animation - horloge = new Timer(40, this); - horloge.start(); // A FAIRE : // 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.repaint(); // 3. Forcer l'affichage du texte - // Enregistrer le score hors de l'EDT pour ne pas bloquer l'UI - new Thread(() -> GestionBDD.ajouterScore((int)this.score)).start();// enregistrement du score dans la base de donne + GestionBDD.ajouterScore((int)this.score);// enregistrement du score dans la base de donne } }