Une application de messagerie instantanée complète développée en Java avec interface graphique Swing et version console.
- Communication client-serveur instantanée
- Messages persistants en base de données SQLite
- Gestion des utilisateurs hors ligne
- Validation des formats d'email
- Interface console : Version terminal pour tests rapides
- Interface GUI simple : Chat basique avec Swing
- Interface GUI complète : Chat + gestion de contacts
- Connexion automatique par email
- Liste des utilisateurs connectés en temps réel
- Statut en ligne/hors ligne
- Authentification sécurisée
- Ajout/modification/suppression de contacts
- Stockage local des informations de contact
- Démarrage de conversation depuis les contacts
- Interface CRUD complète
- Sélection automatique du port disponible
- Sauvegarde du port pour les clients
- Pas de conflit de port
- Linux (Ubuntu, Debian, CentOS, etc.)
- macOS (10.14+)
- Windows (10/11)
- Java 17+ (OpenJDK ou Oracle JDK)
- Maven 3.6+
- Git (pour cloner le projet)
# Mise à jour du système
sudo apt update
# Installation de Java 17
sudo apt install openjdk-17-jdk
# Installation de Maven
sudo apt install maven
# Installation de Git
sudo apt install git
# Vérification des installations
java -version
mvn -version
git --version# Pour CentOS/RHEL
sudo yum install java-17-openjdk-devel maven git
# Pour Fedora
sudo dnf install java-17-openjdk-devel maven git
# Vérification
java -version
mvn -version
git --version# Avec Homebrew (recommandé)
brew install openjdk@17 maven git
# Configuration du JAVA_HOME
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 17)' >> ~/.zshrc
source ~/.zshrc
# Vérification
java -version
mvn -version
git --version-
Java 17 :
-
Maven :
- Télécharger depuis Apache Maven
- Extraire et configurer MAVEN_HOME
- Ajouter
%MAVEN_HOME%\binau PATH
-
Git :
- Télécharger depuis Git for Windows
- Installer avec les options par défaut
-
Vérification (dans Command Prompt) :
java -version
mvn -version
git --versiongit clone <URL_DU_REPOSITORY>
cd java-email-chat-app# Compilation avec Maven
mvn clean compile
# Compilation avec tests (optionnel)
mvn clean test compileLa base de données SQLite est créée automatiquement au premier lancement du serveur.
# Rendre le script exécutable
chmod +x run-test-linux.sh
# Lancer le script de test
./run-test-linux.sh# Lancer le script de test
run-test-windows.batLes scripts de test offrent un menu interactif pour :
- Tester le client console
- Tester l'interface GUI simple
- Tester l'interface GUI complète
- Arrêter le serveur
# Terminal 1 - Serveur
mvn exec:java -Dexec.mainClass="com.chat.ChatServer"Le serveur :
- Trouve automatiquement un port disponible (à partir de 12345)
- Sauvegarde le port dans
runtime/current-port.txt - Affiche les informations de connexion
# Terminal 2 - Client console
mvn exec:java -Dexec.mainClass="com.chat.ChatClientConsole"Utilisation du client console :
- Entrez votre email pour vous connecter
- Commandes disponibles :
msg: Envoyer un messagehelp: Afficher l'aidequit: Quitter
# Terminal 3 - Client GUI simple
mvn exec:java -Dexec.mainClass="com.chat.ui.ChatUI"Fonctionnalités GUI simple :
- Interface Swing basique
- Connexion par email
- Envoi/réception de messages
- Zone de chat scrollable
# Terminal 4 - Client GUI complet
mvn exec:java -Dexec.mainClass="com.chat.ui.ImprovedChatUI"Fonctionnalités GUI complète :
- Interface Swing avancée avec onglets
- Gestion complète des contacts (CRUD)
- Liste des utilisateurs connectés
- Chat intégré avec les contacts
-
Connexion :
Entrez votre email: utilisateur@example.com ✅ Connecté en tant que: utilisateur@example.com -
Envoi de message :
Commande (msg/quit/help): msg Email du destinataire: ami@example.com Message: Salut, comment ça va ? 📤 Message envoyé à ami@example.com -
Réception de message :
💬 Message de ami@example.com: Ça va bien, merci !
-
Connexion :
- Entrez votre email dans le champ "Email"
- Cliquez sur "Connect"
- L'interface s'active une fois connecté
-
Envoi de message :
- Entrez l'email du destinataire dans "To:"
- Tapez votre message
- Cliquez "Send" ou appuyez sur Entrée
-
Onglet Chat :
- Même fonctionnement que l'interface simple
- Liste des utilisateurs connectés à droite
- Clic sur un utilisateur pour le sélectionner comme destinataire
-
Onglet Contacts :
- Ajouter : Bouton "➕ Add" pour créer un nouveau contact
- Modifier : Sélectionner un contact et cliquer "✏️ Edit"
- Supprimer : Sélectionner un contact et cliquer "🗑️ Delete"
- Chat : Sélectionner un contact et cliquer "💬 Start Chat"
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
email TEXT UNIQUE NOT NULL,
display_name TEXT NOT NULL,
password TEXT,
is_online BOOLEAN DEFAULT FALSE,
last_seen DATETIME DEFAULT CURRENT_TIMESTAMP,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);CREATE TABLE chat_messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
sender_email TEXT NOT NULL,
receiver_email TEXT NOT NULL,
content TEXT NOT NULL,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
delivered BOOLEAN DEFAULT FALSE,
read_by_receiver BOOLEAN DEFAULT FALSE
);CREATE TABLE contacts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
phone TEXT,
address TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);chat:
database:
type: sqlite
spring:
datasource:
url: jdbc:sqlite:chat.db
driver-class-name: org.sqlite.JDBCLe serveur sauvegarde le port utilisé dans runtime/current-port.txt. Les clients lisent ce fichier pour se connecter automatiquement au bon port.
# Compilation simple
mvn compile
# Compilation avec tests
mvn test
# Nettoyage et compilation complète
mvn clean compile
# Création du JAR
mvn package-
Test de charge :
- Lancez plusieurs clients simultanément
- Testez la communication entre plusieurs utilisateurs
-
Test de persistence :
- Arrêtez et relancez le serveur
- Vérifiez que les données sont conservées
-
Test de reconnexion :
- Coupez la connexion réseau
- Testez la reconnexion automatique
# Solution 1: Nettoyer le cache Maven
mvn clean
# Solution 2: Forcer le téléchargement des dépendances
mvn dependency:resolve
# Solution 3: Vérifier la version Java
java -version# Vérifier les ports utilisés (Linux/macOS)
netstat -tlnp | grep :12345
# Tuer le processus (Linux/macOS)
kill -9 <PID>
# Windows
netstat -ano | findstr :12345
taskkill /PID <PID> /F# Supprimer la base de données pour la recréer
rm chat.db# Vérifier l'affichage X11 (Linux)
echo $DISPLAY
# Pour WSL Windows
export DISPLAY=:0Les logs sont affichés dans la console du serveur et des clients. Pour plus de détails :
# Lancement avec logs détaillés
mvn exec:java -Dexec.mainClass="com.chat.ChatServer" -Xsrc/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── chat/
│ │ ├── ChatServer.java # Serveur principal
│ │ ├── ChatClientConsole.java # Client console
│ │ ├── entity/ # Entités JPA
│ │ ├── repository/ # Accès aux données
│ │ ├── service/ # Logique métier
│ │ ├── ui/ # Interfaces graphiques
│ │ └── config/ # Configuration
│ └── resources/
│ └── application.yml # Configuration Spring
├── run-test-linux.sh # Script de test Linux/macOS
├── run-test-windows.bat # Script de test Windows
├── pom.xml # Configuration Maven
└── README.md # Documentation
-
Code Style :
- Utiliser les conventions Java standard
- Commenter les méthodes publiques
- Noms de variables explicites
-
Tests :
- Tester chaque nouvelle fonctionnalité
- Tests unitaires avec JUnit
- Tests d'intégration
-
Documentation :
- Mettre à jour le README pour les nouvelles fonctionnalités
- Documenter les API publiques
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Pour toute question ou problème :
- Vérifiez la section Dépannage
- Consultez les logs pour plus d'informations
- Ouvrez une issue sur le repository Git
Version : 1.0.0
Dernière mise à jour : $(date +"%Y-%m-%d")
Compatibilité : Java 17+, Maven 3.6+