Hi,
hab mir einen kleinen Chat gebastelt und hab leider ein Problem beim Schließen des Programms.
Jedes mal wenn ich den "X"-'Button benutze bekomm ich folgende Fehlermeldung:
Mein Client besteht aus 2 Klassen, eine Klasse ist der Client selbst, die andere soll noch so weit ausgebaut werden, dass ich IP, Port und Username einstellen kann und startet bis jetzt nur den Client.
Klasse des Client, client:
Klasse zum Starten des Clients, clientTest:
Dazu hätte ich jetzt 2 Fragen:
1. Was heißt genau die oben genannte Fehlermeldung?
2. Wie kann ich den Fehler beheben und worin liegt er?
Ich bedanke mich schon mal im vorhinein für die Antworten und mit freundlichen Grüßen
Lehrlii
hab mir einen kleinen Chat gebastelt und hab leider ein Problem beim Schließen des Programms.
Jedes mal wenn ich den "X"-'Button benutze bekomm ich folgende Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
Mein Client besteht aus 2 Klassen, eine Klasse ist der Client selbst, die andere soll noch so weit ausgebaut werden, dass ich IP, Port und Username einstellen kann und startet bis jetzt nur den Client.
Klasse des Client, client:
Java:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class client extends JFrame implements WindowListener{
private JTextField userText;
private JTextArea chatWindow;
private ObjectOutputStream output;
private ObjectInputStream input;
private String message = "";
private String serverIP;
private int serverPort=7777;
private Socket connection;
//constructor
public client(String host){
super("Client");
serverIP = host;
userText = new JTextField();
userText.setEditable(false);
userText.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event){
sendMessage(event.getActionCommand());
userText.setText("");
}
}
);
add(userText, BorderLayout.NORTH);
chatWindow = new JTextArea();
add(new JScrollPane(chatWindow), BorderLayout.CENTER);
addWindowListener(this);
setSize(300,150);
setVisible(true);
}
//connect to server
public void startRunning(){
try{
connectToServer();
setupStreams();
whileChatting();
}catch(EOFException eofException){
showMessage("\nClient terminated the conneciton");
}catch(IOException ioException){
ioException.printStackTrace();
}finally{
closeCrap();
}
}
//connect to a server
private void connectToServer() throws IOException{
showMessage("Attempting connection---\n");
connection = new Socket(InetAddress.getByName(serverIP), serverPort);
showMessage("Cennected to :" + connection.getInetAddress().getHostName());
}
//setup streams to send and receive messages
private void setupStreams() throws IOException{
output = new ObjectOutputStream(connection.getOutputStream());
output.flush();
input = new ObjectInputStream(connection.getInputStream());
showMessage("\nstreams are setup \n");
}
//while chatting with server
private void whileChatting() throws IOException{
ableToType(true);
do{
try{
message = (String) input.readObject();
showMessage("\n" + message);
}catch(ClassNotFoundException classNotFoundException){
showMessage("unkown object type");
}
}while(!message.equals("SERVER - END)"));
}
//close the streams and sockets
private void closeCrap(){
showMessage("closing....");
ableToType(false);
try{
output.close();
input.close();
connection.close();
System.exit(0);
}catch(IOException ioException){
ioException.printStackTrace();
}
}
//send messages to server
private void sendMessage(String message){
try{
output.writeObject("CLIENT - " + message);
output.flush();
showMessage("\nClient - " + message);
}catch(IOException ioExceotion){
chatWindow.append("failed sending message");
}
}
//update chat windows
private void showMessage(final String message){
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
chatWindow.append(message);
}
});
}
//gives user permission to type into the chat window
private void ableToType(final boolean tof){ //tof ... true or false
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
userText.setEditable(tof);
}
}
);
}
//window methods, used to close the connection with the x button
@Override
public void windowClosing( WindowEvent event ) {
try {
output.writeObject("CLIENT - END");
output.flush();
closeCrap();
System.exit(0);
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
@Override
public void windowClosed( WindowEvent event ) { /*Empty*/ }
@Override
public void windowDeiconified( WindowEvent event ) { /*Empty*/ }
@Override
public void windowIconified( WindowEvent event ) { /*Empty*/ }
@Override
public void windowActivated( WindowEvent event ) { /*Empty*/ }
@Override
public void windowDeactivated( WindowEvent event ) { /*Empty*/ }
@Override
public void windowOpened( WindowEvent event ) { /*Empty*/ }
}
Klasse zum Starten des Clients, clientTest:
Java:
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class clientTest {
public static void main(String[] args) {
client client;
client = new client("127.0.0.1");
client.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
client.startRunning();
}
}
Dazu hätte ich jetzt 2 Fragen:
1. Was heißt genau die oben genannte Fehlermeldung?
2. Wie kann ich den Fehler beheben und worin liegt er?
Ich bedanke mich schon mal im vorhinein für die Antworten und mit freundlichen Grüßen
Lehrlii