I am trying to build a client server chat application using Swing.
In that when I start client I send a message that I can receive at client site but when I press a button on Server site it will not open up a new Frame (that is in my case error here).
How can I solve it? Can any one suggest me some other way?
My code is (server site):
import java.net.*;
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.sql.*;
class Cli extends JFrame
{
ServerSocket ss;
Socket soc;
InputStream in;
OutputStream out;
DataInputStream sin;
DataOutputStream sout;
JLabel l1;
JTextField txt1;
JButton addd;
Cli() throws Exception
{
Class.forName("com.mysql.jdbc.Driver");
Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/nirav","root","root");
JPanel pan=new JPanel(new GridLayout(2,1));
ss=new ServerSocket(8888);
//ss.setSOLimit(10000);
l1=new JLabel("waiting for client");
txt1=new JTextField(40);
addd=new JButton("click here to send");
addd.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{ try{
JOptionPane.showMessageDialog(null,"Data is successfully inserted into the database." );
l1.setText("waiting");
Recieve c=new Recieve();
c.setSize(300,300);
c.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
c.setVisible(true);
}catch(Exception e)
{
System.out.println(e.toString());
}
}
});
soc=ss.accept();
in=soc.getInputStream();
out=soc.getOutputStream();
sin=new DataInputStream(in);
sout=new DataOutputStream(out);
String s="";
try{
s=sin.readUTF();
}catch(Exception e)
{
}
l1.setText("client :"+s);
pan.add(l1);
pan.add(txt1);
pan.add(addd);
add(pan);
}
class Recieve extends JFrame
{
JLabel msg;
JTextField t1;
JButton a1;
Recieve() throws Exception
{
JPanel pan=new JPanel(new GridLayout(2,1));
t1=new JTextField(40);
a1=new JButton("click here to send");
//msg=new JLabel("waiting...");
a1.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent ae)
{ try{
String s;
String str="Server :";
sout.writeUTF(t1.getText());
//msg.setText(str);
sout.flush();
}catch(Exception e)
{
System.out.println(e.toString());
}
}});
pan.add(t1);
pan.add(a1);
add(pan);
}
}
}
class Server
{
public static void main(String args[]) throws Exception
{
try{
Cli c=new Cli();
c.setSize(300,300);
c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c.setVisible(true);
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}
How are you capturing the message that was sent from the server? You need to implement something that will make usage of your UI listeners to present the updated on the chat windows whenever the application receives data from the server.
I just did a quick research and found this project, try to use his code as reference to implement your program:
https://github.com/rafaelsakurai/socket-exemplo-chat-swing