init: Synchro Tâches
This commit is contained in:
@@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user