"AWT-EventQueue-0" java.lang.NullPointerException

Christopheinfo Messages postés 4 Date d'inscription dimanche 9 mai 2010 Statut Membre Dernière intervention 6 janvier 2011 - 30 déc. 2010 à 20:28
 Utilisateur anonyme - 1 janv. 2011 à 13:50
Bonjour, je planche depuis de longues heure sur un problème..

J'aimerai faire passer un String d'une classe, dans une interface graphique. Lorsque je pensais avoir trouver la bonne solution, j'ai eu cette erreur :
"AWT-EventQueue-0" java.lang.NullPointerException
Sur cette ligne
		fenetreChat.messagesChat(MessagesServeur);


Je ne comprend pas, puis ce forum est mon dernier recours.

Je vous joins les codes des deux classes concernées pour les courageux..

Je voudrais faire passer un string de serveur à ChatServeur.
(Je précise que je ne suis pas expert JAVA ;))

package Echo;


import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;

public class serveur extends Thread{

private ServerSocket serveur;
public static ArrayList listeClients;
private static boolean stop=false;
private String MessagesServeur="test";

ChatServeur fenetreChat;

public serveur(ChatServeur fenetreChat,int portE){

super();
this.fenetreChat=fenetreChat;

listeClients = new ArrayList();

try {
serveur = new ServerSocket(portE);
} catch (IOException e) {
e.printStackTrace();
}
MessagesServeur = ("serveur à l'écoute sur le port : "+portE);
fenetreChat.messagesChat(MessagesServeur);

// Permet le dialogue avec le client
MessagesServeur = ("le serveur attend une connexion");
this.fenetreChat.messagesChat(MessagesServeur);
this.start();
if(stop){
this.stop();
}
}

public void run() {
int i =1;

while(true){
// Attente de la connexion d'un client(bloquant)
try {
Socket socketClient = serveur.accept();
ExoThread thread = new ExoThread(this,socketClient, i);
thread.start();
listeClients.add(thread);
MessagesServeur = ("*******Client "+i+" en ligne********");
this.fenetreChat.messagesChat(MessagesServeur);
i++;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public void envoyerMessageAll(String chaine){

Iterator itr = listeClients.iterator();

while(itr.hasNext()){

ExoThread UnClient = (ExoThread) itr.next();
UnClient.envoyerMessage(chaine);

}

}

public static void main(String[] args) throws IOException {

}

public static void close() {
// TODO Auto-generated method stub
stop=true;
}
}


package Echo;



import java.io.PrintWriter;
import java.lang.*;
import java.net.Socket;
import java.util.*;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;


public class ChatServeur {
final static int DECONNECTE = 0;
final static int CONNECTION = 1;
final static int CONNECTE = 2;

private static JFrame Fenetre = null;
private static JTextArea chatText = null;
private static JLabel statusBar = null;
private static JTextField ipField = null;
private static JTextField portField = null;

// Connection info
private static String hostIP = "localhost";
private static int port = 1999;
private static int connectionStatus = DECONNECTE;
public static boolean isHost = true;
private static ArrayList listePseudo = new ArrayList();
private static ArrayList listeClients;
private static int nbClient = 0;
private static JButton coButton = null;
private static JButton decoButton = null;

serveur srv;

public ChatServeur(serveur s){
super();
this.srv=s;
}

private static JPanel initOptionsPane() {
JPanel pane = null;
ActionAdapter buttonListener = null;

JPanel optionsPane = new JPanel(new GridLayout(4, 1));

// IP address in
pane = new JPanel(new FlowLayout(FlowLayout.RIGHT));
pane.add(new JLabel("Host IP:"));
ipField = new JTextField(10); ipField.setText(hostIP);
ipField.setEditable(true);
pane.add(ipField);
optionsPane.add(pane);

// Port in
pane = new JPanel(new FlowLayout(FlowLayout.RIGHT));
pane.add(new JLabel("Port:"));
portField = new JTextField(10); portField.setEditable(true);
portField.setText((new Integer(port)).toString());
pane.add(portField);
optionsPane.add(pane);

JPanel buttonPane = new JPanel(new GridLayout(1, 2));
buttonListener = new ActionAdapter() {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("connection")) {
decoButton.setEnabled(true);
coButton.setEnabled(false);
connectionStatus = CONNECTION;
statusBar.setText("Serveur Online");
Fenetre.repaint();
new serveur(null, Integer.parseInt(portField.getText()));
chatText.append("Serveur à l'écoute sur le port" +portField.getText()+"\n");
}
// Deco
else {
coButton.setEnabled(true);
decoButton.setEnabled(false);
connectionStatus = DECONNECTE;
nbClient--;
statusBar.setText("Offline");
serveur.close();
Fenetre.repaint();
chatText.append("Serveur déconnecté \n");
}
}
};
coButton = new JButton("Connection");
coButton.setMnemonic(KeyEvent.VK_C);
coButton.setActionCommand("connection");
coButton.addActionListener(buttonListener);
coButton.setEnabled(true);
decoButton = new JButton("deconnexion");
decoButton.setMnemonic(KeyEvent.VK_D);
decoButton.setActionCommand("deconnexion");
decoButton.addActionListener(buttonListener);
decoButton.setEnabled(false);
buttonPane.add(coButton);
buttonPane.add(decoButton);
optionsPane.add(buttonPane);

optionsPane.add(pane);


return optionsPane;
}

private static void initGUI() {
statusBar = new JLabel();
statusBar.setText("Serveur Offline");

JPanel optionsPane = initOptionsPane();

JPanel chatPane = new JPanel(new BorderLayout());
chatText = new JTextArea(10, 20);
chatText.setLineWrap(true);
chatText.setEditable(false);
chatText.setForeground(Color.blue);
chatText.append("bienvenue sur le serveur \n");
JScrollPane chatTextPane = new JScrollPane(chatText,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
chatPane.add(chatTextPane, BorderLayout.CENTER);
chatPane.setPreferredSize(new Dimension(220, 100));

JPanel mainPane = new JPanel(new BorderLayout());
mainPane.add(statusBar, BorderLayout.SOUTH);
mainPane.add(optionsPane, BorderLayout.WEST);
mainPane.add(chatPane, BorderLayout.CENTER);

Fenetre = new JFrame("Chat");
Fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Fenetre.setContentPane(mainPane);
Fenetre.setSize(Fenetre.getPreferredSize());
Fenetre.setLocation(200, 200);
Fenetre.pack();
Fenetre.setVisible(true);

}

public static void main(String args[]) {
initGUI();

}

public void messagesChat(String messagesServeur) {
// TODO Auto-generated method stub
chatText.append(messagesServeur+"\n");
}

}


A voir également:

7 réponses

lural Messages postés 131 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 4 janvier 2011 2
31 déc. 2010 à 09:17
Bonjour,

	buttonListener = new ActionAdapter() {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("connection")) {
                                        [...]
new serveur(null, Integer.parseInt(portField.getText()));
[...]
}


Tu créer donc une nouvelle instance de "serveur" avec en premier paramètre null ...

public serveur(ChatServeur fenetreChat,int portE){
[...]
fenetreChat.messagesChat(MessagesServeur);


Que tu récupères et tu fait messageChat() sur un objet null.
Donc a l'exécution, tu as un pointeur null, et null ne peut pas effectuer cette fonction évidemment...
(je n'ai pas lu le reste du code)

Bye
0