Hi zusammen
Ich programmiere grad einen Chat welcher über das TCP Protokoll läuft. Als Vorlage habe ich mir Java TCP Sockets and Swing Tutorial genommen. Die Verbindung zwischen Server und Client krieg ich hin, jedoch habe ich Probleme mit dem Versenden von Strings...
Poste zuerst mal meinen Code:
Hier die GUI Elemente
Socketerstellung
In dieser Klasse werden die Sockets erstellt, je nach Auswahl der RadioButton
Fehlermeldung und Problem[/
Wenn ich nun auf den buttonSend drücke, soll er den Text senden und auf der anderen Seite darstellen.
Jedoch erhalte ich folgende Fehlermeldung
[Java]Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at ch.chaos.chat.GUI.ActionConnection.actionPerformed(ActionConnection.java:110)
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)
[/Java]
Es zeigt auf den output.print(message) und sagt es sei null. Was muss ich verändern, damit ich Strings versenden kann?
gruss iChaos
Ich programmiere grad einen Chat welcher über das TCP Protokoll läuft. Als Vorlage habe ich mir Java TCP Sockets and Swing Tutorial genommen. Die Verbindung zwischen Server und Client krieg ich hin, jedoch habe ich Probleme mit dem Versenden von Strings...
Poste zuerst mal meinen Code:
Hier die GUI Elemente
Java:
public class GuiElements extends JPanel {
private JTextField textFieldIP;
private JTextField textFieldPort;
private JButton buttonConnect;
private JProgressBar progressbar;
private JRadioButton radioButtonHost;
private JRadioButton radioButtonClient;
private JPanel panelChat;
private JTextArea textAreaChat;
private JTextField textFieldMessage;
private JButton buttonSend;
private JButton buttonHide;
public GuiElements() {
this.setLayout(new BorderLayout());
JPanel panelConnect = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel labelIP = new JLabel("IP:");
textFieldIP = new JTextField("localhost");
JLabel labelPort = new JLabel("Port:");
textFieldPort = new JTextField("3306");
ButtonGroup buttonGroupChoose = new ButtonGroup();
radioButtonHost = new JRadioButton("Host");
radioButtonClient = new JRadioButton("Client");
buttonGroupChoose.add(radioButtonHost);
buttonGroupChoose.add(radioButtonClient);
progressbar = new JProgressBar(0, 100);
progressbar.setBackground(Color.RED);
buttonConnect = new JButton("Connect!");
panelConnect.add(labelIP);
panelConnect.add(textFieldIP);
panelConnect.add(labelPort);
panelConnect.add(textFieldPort);
panelConnect.add(radioButtonHost);
panelConnect.add(radioButtonClient);
panelConnect.add(buttonConnect);
panelConnect.add(progressbar);
panelChat = new JPanel(new FlowLayout(FlowLayout.LEFT));
textAreaChat = new JTextArea(20, 55);
JScrollPane scrollPaneChat = new JScrollPane(textAreaChat);
textFieldMessage = new JTextField("User:",40);
buttonSend = new JButton("Senden");
buttonHide = new JButton("Hide");
buttonHide.addActionListener(null);
JPanel panelSend = new JPanel(new FlowLayout(FlowLayout.LEFT));
panelSend.add(textFieldMessage);
panelSend.add(buttonSend);
panelSend.add(buttonHide);
panelChat.add(scrollPaneChat);
panelChat.add(panelSend,new GridLayout(1, 3));
buttonConnect.addActionListener(new ActionConnection(textFieldIP,textFieldPort,radioButtonHost,radioButtonClient,buttonConnect,progressbar,textAreaChat,textFieldMessage,buttonSend));
buttonSend.addActionListener(new ActionConnection(textFieldIP,textFieldPort,radioButtonHost,radioButtonClient,buttonConnect,progressbar,textAreaChat,textFieldMessage,buttonSend));
this.add(panelConnect,BorderLayout.NORTH);
this.add(panelChat,BorderLayout.CENTER);
}
}
Socketerstellung
In dieser Klasse werden die Sockets erstellt, je nach Auswahl der RadioButton
Java:
public ActionConnection(JTextField textFieldIP, JTextField textFieldPort, JRadioButton radioButtonHost, JRadioButton radioButtonClient,JButton buttonConnect, JProgressBar progressbar, JTextArea textAreaChat, JTextField textFieldMessage, JButton buttonSend) {
this.radioButtonHost = radioButtonHost;
this.radioButtonClient = radioButtonClient;
this.buttonConnect = buttonConnect;
this.progressbar = progressbar;
this.buttonSend = buttonSend;
this.textAreaChat = textAreaChat;
this.textFieldMessage = textFieldMessage;
hostIP = textFieldIP.getText();
hostPort = Integer.parseInt(textFieldPort.getText());
}
public void start(){
Thread threadConnect = new Thread(this);
threadConnect.start();
}
public void run() {
try {
if (radioButtonHost.isSelected()) {
hostServer = new ServerSocket(hostPort);
progressbar.setBackground(Color.GREEN);
socket = hostServer.accept();
}
if (radioButtonClient.isSelected()) {
socket = new Socket(hostIP, hostPort);
progressbar.setBackground(Color.GREEN);
}
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
output = new PrintWriter(socket.getOutputStream(), true);
if (input.ready()) {
answer = input.readLine();
if ((answer != null) && (answer.length() != 0)) {
System.out.println("CATCH");
textAreaChat.setText("INCOMING: " + answer + "\n");
}
}
}
catch (IOException ioExc) {
System.out.println(ioExc);
}
}
public void actionPerformed(ActionEvent buttonEvent) {
if(buttonEvent.getSource().equals(buttonConnect)){
start();
}
if(buttonEvent.getSource().equals(buttonSend)){
message = textFieldMessage.getText();
if (message.length() != 0) {
output.print(message);
output.flush();
textAreaChat.setText("\n" +message + "\n");
}
}
}
}
Fehlermeldung und Problem[/
Wenn ich nun auf den buttonSend drücke, soll er den Text senden und auf der anderen Seite darstellen.
Jedoch erhalte ich folgende Fehlermeldung
[Java]Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at ch.chaos.chat.GUI.ActionConnection.actionPerformed(ActionConnection.java:110)
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)
[/Java]
Es zeigt auf den output.print(message) und sagt es sei null. Was muss ich verändern, damit ich Strings versenden kann?
gruss iChaos