Afficher un objet reçu coté client
Fermé
Vit@l
Messages postés
28
Date d'inscription
dimanche 6 avril 2014
Statut
Membre
Dernière intervention
12 juin 2020
-
12 févr. 2020 à 19:02
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 13 févr. 2020 à 19:47
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 13 févr. 2020 à 19:47
A voir également:
- Afficher un objet reçu coté client
- Vente objet occasion entre particulier - Guide
- Orange service client - Guide
- Formate pour taxer client 500€ ✓ - Forum Consommation & Internet
- Formate pour taxer client frigo vide - Forum Loisirs / Divertissements
- Sfr service client - Guide
2 réponses
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
13 févr. 2020 à 08:22
13 févr. 2020 à 08:22
Bonjour,
En Java il y a des dizaines de manières de coder une application client-serveur.
Sans ton code ta question est bien trop imprécise pour pouvoir t'aider...
En Java il y a des dizaines de manières de coder une application client-serveur.
Sans ton code ta question est bien trop imprécise pour pouvoir t'aider...
Vit@l
Messages postés
28
Date d'inscription
dimanche 6 avril 2014
Statut
Membre
Dernière intervention
12 juin 2020
4
Modifié le 13 févr. 2020 à 19:41
Modifié le 13 févr. 2020 à 19:41
salut KX, j'aurais du penser à mettre du code. Au fait le client envoie une requête au serveur, celui-ci sérialise le résultat dans un JTable puis le désérialise, et enfin l'envoi au client qui ne fait qui ne fait qu'un casting (en JTable) de l'objet reçu puis l'affiche dans un JPanel. voici mes codes:
côté serveur:
classe qui traite les requêtes reçues
coté client
Classe de réception d'objets et chaines de caractères
et enfin la classe qui envoie les requêtes
Voilà, c'est fait. Comme annoncé dans mon premier message, les deux applications fonctionnent bien n'étant pas encore exportées. après exportation du client en jar exécutable aucun affichage de tableau, aucune erreur non plus... c'est dur de savoir par où commencer. Merci encore de bien vouloir m'assister
côté serveur:
//Classe réception des messages et des requêtes class ReceptionMessage extends Thread { ExecutionRequete exereq; Communication commu; ObjectInputStream ois; ObjectOutputStream oos; Object str = new Object(); String messageRecu = "", st = ""; int numeroClient; boolean message = false, requete = false; ReceptionMessage(Communication com, int numeroclient) { this.commu = com; this.numeroClient = numeroclient; this.ois = commu.ois; this.oos = commu.oos; compteurClient++; setNomFichierResultat("Client" + compteurClient); } public void run() { while (true) { try { try { str = (Object) ois.readObject(); if (str.toString().startsWith("\tvitdmsg")) { message = true; requete = false; } if (str.toString().startsWith("\tvitdreq")) { message = false; requete = true; } if (message) {// Construction du message st = str.toString() + "\n"; messageRecu += st; } if (str.toString().endsWith("\tvitfmsg")) {// si le message est entièrement reçu messageRecu = messageRecu.substring(8, messageRecu.length() - 8); panChat.add(new BlocChat("Client-" + numeroClient, messageRecu)); panChat.revalidate(); messageRecu = ""; message = false; } if (requete) {// Si c'est une requête, on la construit if (accesBDD) { st = str.toString(); messageRecu = st.substring(8, st.length()); exereq = new ExecutionRequete(messageRecu); exereq.start(); while (!exereq.resSerialPret) System.out.println("Téléchargement en cours ..."); System.out.println("Téléchargement terminé!"); // afficherResultatRequete(getNomFichierResultat()); oos.writeObject(tabResSerial); oos.flush(); messageRecu = ""; requete = false; exereq.resSerialPret = false; } } } catch (java.net.SocketException e) { System.out.println("Auto-déconnexion brusque du client " + numeroClient); conteneurBloc.remove(tabBlocClient[numeroClient - 1]); panBtnClient.revalidate(); ois.close(); break; } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
classe qui traite les requêtes reçues
//Classe d'exécution des requêtes class ExecutionRequete extends Thread { private String requete = ""; private ResultSet resultat; ObjectOutputStream oosSerial; private int ligne = 0, colonne = 0; private JTable tableResultat; boolean resSerialPret = false; ExecutionRequete(String req) { this.requete = req; } public synchronized void run() { try { try { resultat = stm.executeQuery(requete); while (resultat.next()) ligne++; // on renseigne le nombre de lignes resultat = stm.executeQuery(requete); genererResultat(resultat); } catch (com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException e) { System.out.println("Connexion à la base des données non admise"); } // afficherResultat(resultat); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //Méthode de construction du tableau des résultats protected void genererResultat(ResultSet result) { String[] tabTitre; String[][] tabDonnees; try { colonne = result.getMetaData().getColumnCount();// on renseigne le nombre de colonnes System.out.println("Nombre de colonnes: " + colonne); tabTitre = new String[colonne]; for (int i = 1; i <= colonne; i++) {// Remplissage du tableau des titres tabTitre[i - 1] = result.getMetaData().getColumnName(i); } System.out.println("nombre de lignes trouvé: " + ligne); tabDonnees = new String[ligne][colonne]; //Remplissage des données int l = 0; while (result.next()) { for (int k = 1; k <= colonne; k++) { tabDonnees[l][k - 1] = result.getString(k); } l++; } //remplissage du JTable this.tableResultat = new JTable(tabDonnees, tabTitre); //Sérialisation et désérialisation try { this.oosSerial = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(new File("ResReq/" + nomFichierResultat)))); oosSerial.writeObject(tableResultat); oosSerial.close(); ObjectInputStream oisSerial = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("ResReq/" + nomFichierResultat)))); try { tabResSerial = (JTable) oisSerial.readObject(); resSerialPret = true; } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //Méthode qui renvoi le résultat sérialisé public JTable getResultat() { return tabResSerial; } // Méthode d'affichage du tableau des résultats void afficherResultatConsole(ResultSet result) { try { while (result.next()) { for (int i = 1; i <= result.getMetaData().getColumnCount(); i++) { System.out.print(result.getString(i) + "\t|"); } System.out.println("\n-----------------------------------------"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
coté client
Classe de réception d'objets et chaines de caractères
class ReceptionMessage extends Thread { Object str = new Object(), objetRecu = new Object(); String messageRecu = "", st = ""; boolean message = false, objet = false; public void run() { while (true) { try { try { try { str = (Object) ois.readObject(); } catch (java.net.SocketException e) {// Lorsque on ferme la fenêtre du serveur sans déconnexion des clients System.out.println("Fermeture brusque du serveur"); ois.close(); break; } } catch (java.io.EOFException e) {// Déconnexion à partir du serveur labBienvenue.setText("Déconnexion à partir du serveur"); ois.close(); break; } try {// Portion de vérification du type if (str.toString().startsWith("\tvitdmsg")) {// vérification du type message = true;// c'est un message objet = false;// c'est le résultat d'une requête } } catch (NullPointerException e) {// C'est un objet objet = true; } if (message) { // Si c'est un message, construction du message st = str.toString() + "\n"; messageRecu += st; } if (message == false) objet = true; try { if (str.toString().endsWith("\tvitfmsg")) {// On affiche le message une fois reçu entièrement messageRecu = messageRecu.substring(8, messageRecu.length() - 8); conteneurBloc.add(new BlocChatReception(messageRecu)); jspConteneurBloc.revalidate(); System.out.println("Réception du message:" + str.toString()); messageRecu = ""; message = false; } } catch (NullPointerException e) { objet = true; } if (objet) {// si c'est un objet; lecture de l'objet System.out.println("C'est un objet");// On fait aussi sa lecture objet = false; afficherResultat(str); panCentral.revalidate(); } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void afficherResultat(Object tabres) { JTable tabResSerial = new JTable(); try { ObjectOutputStream oosSerial = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(new File("ResReq")))); oosSerial.writeObject(tabres); oosSerial.close(); System.out.println("Fin de sérialisation"); ObjectInputStream oisSerial = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("ResReq")))); try { tabResSerial = (JTable) oisSerial.readObject(); oisSerial.close(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } panResultat.removeAll(); panResultat.add(new JScrollPane(tabResSerial)); System.out.println("C'est fait!"); } }
et enfin la classe qui envoie les requêtes
class MesRequetesListener implements ActionListener { String requete = ""; public void actionPerformed(ActionEvent arg0) { if (arg0.getSource().equals(btnRechNumPlaque)) { requete = "\tvitdreqSELECT * FROM Eleve";// On donne une valeur à la requête System.out.println(requete); } try { try { oos.writeObject(requete); oos.flush(); requete = ""; } catch (java.net.SocketException e) {// Lorsqu'on n'est pas connecté labBienvenue.setText("Vous n'êtes pas connecté"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Voilà, c'est fait. Comme annoncé dans mon premier message, les deux applications fonctionnent bien n'étant pas encore exportées. après exportation du client en jar exécutable aucun affichage de tableau, aucune erreur non plus... c'est dur de savoir par où commencer. Merci encore de bien vouloir m'assister
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
Modifié le 13 févr. 2020 à 19:49
Modifié le 13 févr. 2020 à 19:49
Pour commencer, démarres tes applications depuis une console, cela permettra de voir s'afficher tous les messages (System.out et System.err) qui t'aideront à savoir ce qui se passe (et si besoin tu peux en rajouter...)
Commande de démarrage :
Si vraiment tu vois que le programme "bloque", tu peux utiliser la commande
Grâce à cet identifiant tu peux utiliser
Commande de démarrage :
java -jar MonFichier.jar
Si vraiment tu vois que le programme "bloque", tu peux utiliser la commande
jpsqui affichera la liste des programmes Java démarrés et leurs identifiants (par exemple 1234).
Grâce à cet identifiant tu peux utiliser
jstack 1234qui affichera la stack de tous les threads en cours, pour voir sur quelles lignes le programme est bloqué.