Affichage du résultat d'une requête client

Fermé
Vit@l Messages postés 28 Date d'inscription dimanche 6 avril 2014 Statut Membre Dernière intervention 12 juin 2020 - 11 févr. 2020 à 09:04
Bonjour,
Merci d'avance pour votre aide.
Je développe une application client-serveur. Au point où je suis, j'affiche le résultat de la requête du client et dans mon application serveur et dans celle du client. ce résultat n'est autre qu'un tableau que je désérialise (j'ai stocké le résultat du resultSet dans ce tableau, puis j'ai sérialisé ce dernier). Le problème est que ; bien que ça semble marcher, j'obtiens une exception:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
sans me montrer la ligne qui la génère. Je suis perdu! Je serai très ravi de votre aide.
Voici le code de la classe qui traite les requêtes:
//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;

ExecutionRequete(String req){
this.requete=req;

}
public synchronized void run(){

try {
try {
stm=ConnexionBDD.getInstance().createStatement();
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();
} 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;
}

Et la classe qui reçoit les requêtes du client
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
st=str.toString();
messageRecu=st.substring(8, st.length());
exereq=new ExecutionRequete(messageRecu);
exereq.start();
afficherResultatRequete(getNomFichierResultat());
oos.writeObject(tabResSerial);
oos.flush();

messageRecu="";
requete=false;
panCentral.revalidate();
}

} 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();
}
}

}
}


En entièreté voici ce que m'affiche la console après l'envoi de la requête "SELECT *FROM eleve":

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.plaf.basic.BasicTableUI.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at javax.swing.ScrollPaneLayout.preferredLayoutSize(Unknown Source)
at java.awt.Container.preferredSize(Unknown Source)
at java.awt.Container.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at java.awt.FlowLayout.layoutContainer(Unknown Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.validateInvalidComponents(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.plaf.basic.BasicTableUI.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at javax.swing.ScrollPaneLayout.layoutContainer(Unknown Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.validateInvalidComponents(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.plaf.basic.BasicTableUI.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at javax.swing.ScrollPaneLayout.layoutContainer(Unknown Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.validateInvalidComponents(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)



Configuration: Windows / Firefox 72.0