Java application client/ serveur erreur

Fermé
stevengren Messages postés 164 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 11 décembre 2012 - 6 févr. 2011 à 09:10
choubaka Messages postés 39409 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 24 décembre 2024 - 8 févr. 2011 à 07:52
Bonjour,

j'ai une simple application, 4 classes : Client, Serveur, Protocole, InterfaceClient. au départ de l'application l'interface s'affiche une jlist un JtextField et un bouton envoyer. Alors mon protocole veut qu'une question soit afficher dans las jlist qui est une demande d'identification la personne inscris sa réponse dans le jtextfield et appuis sur envoyer et c'est la mon problème lors de l'événement sur le bouton je récupere le contenu du jtextfield par exemple sg123 et ensuite je veux envoyer ce message qui est le message du client vers le serveur, mon client et mon serveur communique avec les sockets

ex : Classe Client

clientSocket = new Socket("localhost", 9540);
sortie = new PrintWriter(clientSocket.getOutputStream(), true);
entree = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

alors lorsque je récupere sg123 lors du clique sur le bouton envoyer dans ma classe interfaceClient je tente ensuite denvoyer cela vers le serveur

j'appele une méthode envoyerMessageUser qui est dans la classe client et je luis passe le message 'sg123' qui elle fait tout simplement envoyer le messager vers le serveur

public void envoyerMessageUser(String message){
sortie.println(message);
}

cette derniere commande ne fonctionne pas j'ai toujours une erreur
je ne comprend pas pourquoi.


Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at client.Client.envoyerMessageUser(Client.java:75)
at client.InterfaceClient.btnEnvoyer_actionPerformed(InterfaceClient.java:121)
at client.InterfaceClient.access$0(InterfaceClient.java:118)
at client.InterfaceClient$1.actionPerformed(InterfaceClient.java:52)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(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)

A voir également:

5 réponses

choubaka Messages postés 39409 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 24 décembre 2024 2 104
6 févr. 2011 à 09:18
Bonjour

Difficile à dire sans voir tout le code.
Mais, il est clair qu'un objet n'a pas été instancié.
0
stevengren Messages postés 164 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 11 décembre 2012
6 févr. 2011 à 19:24
Classe client

package client;
import java.io.*;
import java.net.*;

import javax.swing.JOptionPane;

public class Client {
private static PrintWriter sortie = null;
public static void main(String[] args) throws IOException {

Socket clientSocket = null;
PrintWriter sortie = null;
BufferedReader entree = null;
int compteur = 0;

try {
clientSocket = new Socket("localhost", 9540);
sortie = new PrintWriter(clientSocket.getOutputStream(), true);
entree = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Host inconnu"+ e);
} catch (IOException e) {
System.err.println("erreur connection" + e);
}
JOptionPane.showMessageDialog(null,"Connexion établie", "INFORMATION",JOptionPane.INFORMATION_MESSAGE);
InterfaceClient inter = new InterfaceClient();
inter.setVisible(true);
BufferedReader stdEntree = new BufferedReader(new InputStreamReader(System.in));
String fromServer = "Rien pour l'instant Serveur";
String fromUser = "Rien pour l'instant User";

while ((fromServer = entree.readLine()) != null) {

System.out.println("Server: " + fromServer);
boolean resul = inter.setListe(fromServer, compteur);
compteur++;
if (fromServer.equals("Base Command Out")){
}
else if (fromServer.equals("protocole incorrect")){
inter.reinitialiserListe();
resul = inter.setListe("protocole incorrect", 0);
compteur = 1;
}
else{
fromUser = stdEntree.readLine();
fromUser = inter.getReponseClient();


}

if (fromUser != null) {
if (fromUser.equalsIgnoreCase("thunder") || fromUser.equalsIgnoreCase("easy Company, 506th, 101st Airborne Division")){
System.out.println("Easy Compagny : " + fromUser);
resul = inter.setListe(fromUser, compteur);
compteur++;
sortie.println(fromUser);


}
else if (fromUser.equalsIgnoreCase("We're Oscar Mike. easy Company Out.")){
JOptionPane.showMessageDialog(null,"Communication réussit", "SUCCEES",JOptionPane.INFORMATION_MESSAGE);
}

System.out.println("Easy Compagny : " + fromUser);
sortie.println(fromUser);
}
}

sortie.close();
entree.close();
stdEntree.close();
clientSocket.close();
}
public static void envoyerMessageUser(String message){
sortie.println(message);
}

//public void affichage()
}

classe interface

package client;
import utilitaire.Message;

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.util.ArrayList;

public class InterfaceClient extends JFrame {
private JPanel panneauNord = null,
panneauSud = null;
private JLabel statusConnection = null,
etat = null;

private JScrollPane scroller = null;
private JList liste = null;
private EcouteurFenetre ecouteurFenetre = null;
private String[] listeCommunication = new String[8];
private JTextField reponse = new JTextField();
private JButton btnEnvoyer = new JButton();
private String reponseClient;

public InterfaceClient(){
this.getContentPane().setLayout(null);
this.setTitle("Communication CLIENT");
this.setLocation(100, 100);
this.setSize(700, 390);
this.setResizable(false);
Color vert = new Color(54, 213, 36);
reponse.setBounds(new Rectangle(1, 300, 500, 25));


etat = new JLabel("État :");
etat.setBounds(new Rectangle(3,325,250,25));

statusConnection = new JLabel("Connecter");
statusConnection.setForeground(vert);
statusConnection.setBounds(new Rectangle(35,326,250,25));
btnEnvoyer.setText("Valider");
btnEnvoyer.setBounds(new Rectangle(170, 45, 80, 25));
btnEnvoyer.setFont(new Font("Dialog", 1, 12));
btnEnvoyer.addActionListener(new ActionListener() //Ajout de l'écouteur d'événement
{

/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed
* (java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent e)
{
btnEnvoyer_actionPerformed(e);
}
});
//Instancier les écouteurs
ecouteurFenetre = new EcouteurFenetre();

//Relier l'écouteur à la fenêtre
this.addWindowListener(new EcouteurFenetre());

//Initialiser le panneau principal de la fenêtre au conteneur par défaut
Container panPrincipal = this.getContentPane();

//Créer les composantes graphique de la zone de texte panneau centre
//et les ajouter

liste = new JList(listeCommunication);
Color jauneclair = new Color(255, 255, 212);
Color bleu = new Color(0, 85, 255);
liste.setFont(new Font("Serif",Font.PLAIN,12));
liste.setBackground(jauneclair);
liste.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
scroller = new JScrollPane(liste);
scroller.setBounds(new Rectangle(1,50,500,250));
this.getContentPane().add(reponse,null);
this.getContentPane().add(statusConnection);
this.getContentPane().add(scroller);
this.getContentPane().add(etat);
this.getContentPane().add(btnEnvoyer);

/* panneauSud = new JPanel(new BorderLayout());
panneauSud.add(scroller);
panneauSud.add(reponse);*/

/*panneauNord = new JPanel(new BorderLayout());
panneauNord.add(statusConnection);

panPrincipal.add(panneauSud, BorderLayout.CENTER);
panPrincipal.add(panneauNord, BorderLayout.SOUTH); */

}

/**
* A utiliser pour recevoir la liste
* @return liste
*/
public JList getListe(){
return liste;
}
public String getReponseClient(){
return reponseClient;
}
/**
* A utiliser pour modifier la liste
* @return vrai si la liste a été modifiée et faux sinon
*/
public boolean setListe (String mess, int pos) {
listeCommunication[pos] = mess;
liste.setListData(listeCommunication);
return true;
}
public void reinitialiserListe(){
for(int i = 0; i < 7; i++){
listeCommunication[i] = " ";
}

}
private void btnEnvoyer_actionPerformed(ActionEvent e){

reponseClient = reponse.getText()+ "a";
Client.envoyerMessageUser(reponseClient);
JOptionPane.showMessageDialog(null,"Ok evenement correct");
}

/**
* Classe d'écouter de la fenêtre
*/
private class EcouteurFenetre extends WindowAdapter{

/* (non-Javadoc)
* @see java.awt.event.WindowAdapter#windowClosing(java.awt.event.WindowEvent)
*/
public void windowClosing(WindowEvent evt){
System.exit(0);
}
}


public static void main(String[] args)
{
//InterfaceServeur inter = new InterfaceServeur();
//inter.setVisible(true);
}

}

Classe Serveur

package serveur;
import protocole.Protocole;
import java.net.*;
import java.io.*;

public class Serveur{
public static void main(String[] args)throws IOException{
ServerSocket serSocket = null;
try{
serSocket = new ServerSocket(9540);
}
catch(IOException e){
System.out.println("Erreur lors connection sur port 9540" + e);
}
Socket connection = null;
try{
connection = serSocket.accept();
}
catch (IOException e){
System.out.println("Erreur lors de la connection avec le client" + e);
}
PrintWriter sortie = null;
BufferedReader entree = null;

sortie = new PrintWriter(connection.getOutputStream(),true);
entree = new BufferedReader(new InputStreamReader(connection.getInputStream()));

String ligneEntree,
ligneSortie;
Protocole protocol = new Protocole();

ligneSortie = protocol.messageEntrant(null);
sortie.println(ligneSortie);

while((ligneEntree = entree.readLine())!= null){
ligneSortie = protocol.messageEntrant(ligneEntree);
sortie.println(ligneSortie);
if(ligneSortie.equals("We're Oscar Mike. Easy Company Out.")){
System.out.println("ok on se rend jusqu'a la fin maintenant les else");
}
}
sortie.close();
entree.close();
connection.close();
serSocket.close();



}

}
0
stevengren Messages postés 164 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 11 décembre 2012
6 févr. 2011 à 19:25
voici mon code je comprend vraiment pas pourquoi j'ai cette erreur svp aaidez moi
0
choubaka Messages postés 39409 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 24 décembre 2024 2 104
6 févr. 2011 à 20:59
je vois que ton PrintWriter sortie est déclaré deux fois ...
0
stevengren Messages postés 164 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 11 décembre 2012
6 févr. 2011 à 21:15
oui si je comprend bien se que tu veut dire mais jai 2 printWriter 1pour le serveur et un pour le client : je lai ai nommer les 2 sortie dans les differentes classes
jai aussi 2 BufferedReader Cela me permet de envorer et de recevoir entre client et serveur
0
stevengren Messages postés 164 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 11 décembre 2012
6 févr. 2011 à 21:22
La ou est mon probleme est que j'utilisais se programme sans interface graphique j'utilisais BufferedReader(new InputStreamReader(System.in)) mais la je récupere le contenu d'une JtexteField de ma nouvelle interface et je veux envoyer le message (qui est le message du client) vers le serveur dans mon actionPerform de mon bouton envoyer de ma classe interface j'appelle une méthode de la classe client qui recoit le message récurer dans l'interface et fais sortie.println(message); et jai tourours un erreur le message n'est pas envoiyer au serveur par le PrintWriter
0
stevengren Messages postés 164 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 11 décembre 2012
6 févr. 2011 à 21:24
j'ai tester avec le déboguer et le contenu de ma variable message juste avant le sortie.println(message); est ok c'est-a-dire qu'elle ne contient pas null
jy comprends vraiment rien
0
choubaka Messages postés 39409 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 24 décembre 2024 2 104
8 févr. 2011 à 07:52
public class Client {
private static PrintWriter sortie = null;
public static void main(String[] args) throws IOException {

Socket clientSocket = null;
PrintWriter sortie = null; BufferedReader entree = null;
int compteur = 0;



c'est ça que je voulais dire... c'est dans la même classe, non ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
L'erreur se situe sur quelle ligne?
0