Results 1 to 20 of 60
Thread: How update Jlist in java Chat
- 08-24-2011, 06:25 PM #1
Member
- Join Date
- Jul 2011
- Location
- kent, UK
- Posts
- 47
- Rep Power
- 0
How update Jlist in java Chat
Hi everyone, am sorry, i have a problem here, believe me i have tried as much as i can. but unfortunately couldn't get the back of it, before thinking of posting for help. and thank you in advance for ur time and effort.
i am trying to update my Client JList (userList) so that when a new client comes in, the initial client would be updated. but at present, when there's a single client, it can see itself but when another client enters the chat, only that client sees the two clients connected, the initial client is not updated with the name on the JList.
please help simplify any answer because am not expert in java. thank you!!
the Client code
Java Code:import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ClientChat extends JFrame { private Toolkit toolkit; private JLabel msgLabel; private JButton sendBtn; private JTextArea genMsg; public static JList userList; private JTextField msgF; private ObjectOutputStream output; private ObjectInputStream input; private Socket client; private String chatServer; private int serverport; private String Client_name; public ClientChat( String host, int port,String C_Name){ // set server to which this client connects chatServer = host; serverport = port; Client_name = C_Name; toolkit = Toolkit.getDefaultToolkit(); if(toolkit.getScreenSize().getWidth() > 600) setSize(600, 605); else setSize((int)toolkit.getScreenSize().getWidth(),(int)toolkit.getScreenSize().getHeight() - 20); setResizable(false); Dimension dimension = getSize(); setLayout(new FlowLayout()); setTitle("FRESHER MARKETING COMPANY"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0);}}); Container container = getContentPane(); container.setLayout(new FlowLayout()); // create General Message Screen genMsg = new JTextArea(30,43); genMsg.setEditable(false); genMsg.setFont(new java.awt.Font("Times New Roman", 0, 12)); // NOI18N container.add( new JScrollPane( genMsg )); JPanel genMsgPanel = new JPanel(); genMsgPanel.setLayout(new BorderLayout()); genMsgPanel.add(new JScrollPane(genMsg), BorderLayout.EAST); genMsgPanel.setBorder(BorderFactory.createLineBorder(Color.black)); container.add(genMsgPanel); // create Friend List View userList = new JList(); userList.setPreferredSize(new Dimension(150,423)); userList.setFont(new java.awt.Font("Times New Roman", 0, 12)); // NOI18N container.add(userList); JPanel userListPanel = new JPanel(); userListPanel.setLayout(new BorderLayout()); userListPanel.add(userList, BorderLayout.CENTER); userListPanel.setBorder(BorderFactory.createLineBorder(Color.black)); container.add(userListPanel); msgLabel = new JLabel ("Message:"); container.add(msgLabel); JPanel msgFPanel = new JPanel(); msgFPanel.setLayout(new BorderLayout()); msgFPanel.add(new JScrollPane(msgLabel), BorderLayout.WEST); container.add(msgFPanel); // create Message Field msgF = new JTextField(37); msgF.setEnabled( true ); msgF.setText(""); msgF.requestFocus(); msgF.addActionListener( new ActionListener() { // send message to server public void actionPerformed( ActionEvent event ) { //sendData( event.getActionCommand() ); } } // end anonymous inner class ); // end call to addActionListener msgFPanel.add(new JScrollPane(msgF), BorderLayout.CENTER); } public void runClient() { // connect to server, get streams, process connection try { // Step 1: Create a Socket to make connection connectToServer(); // Step 2: Get the input and output streams getStreams(); handShake(); }// server closed connection catch ( EOFException eofException ) { System.out.println( "Server terminated connection" ); } // process problems communicating with server catch ( IOException ioException ) { ioException.printStackTrace(); } } private void connectToServer() throws IOException { genMsg.setText( "Attempting connection\n" ); // create Socket to make connection to server client = new Socket(InetAddress.getByName( chatServer ), serverport ); // display connection information genMsg.append( "Connected to: " +client.getInetAddress().getHostName() ); } private void getStreams() throws IOException { // set up output stream for objects output = new ObjectOutputStream(client.getOutputStream() ); // flush output buffer to send header information output.flush(); } private void handShake() throws IOException { String message; String value[]; value = new String [100]; try { output.writeObject(Client_name); output.flush(); input = new ObjectInputStream(client.getInputStream() ); genMsg.append( "\n Client Name Send" ); message = (String) input.readObject(); int i=0; while ( !message.equals( "." ) ){ //genMsg.append("\n"+message ); value[i++] =message; message = (String) input.readObject(); } userList.setListData(value); message = (String) input.readObject(); genMsg.append("\n"+message ); } // process problems sending object catch ( IOException ioException ) { genMsg.append( "\nError writing object" ); } catch ( ClassNotFoundException classNotFoundException ) { System.out.println( "\nUnknown object type received" ); } } public static void main( String args[] ) { ClientChat application; application = new ClientChat( "127.0.0.1",5130,args[0] ); application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); application.runClient(); } }
Java Code:// Java core packages import java.io.*; import java.net.*; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ServerChat extends JFrame { private ObjectInputStream input; private ObjectOutputStream output; private JTextField enterField; public static JTextArea displayArea; private ServerSocket server; private Socket connection; private ServerThread c1[]; //private Client Cname; private static String clientList[]; private int counter = 0; public ServerChat() { super( "Server" ); Container container = getContentPane(); clientList = new String[100]; // create enterField and register listener enterField = new JTextField(); enterField.setEnabled( false ); enterField.addActionListener( new ActionListener() { // send message to client public void actionPerformed( ActionEvent event ) { //sendData( event.getActionCommand() ); } } // end anonymous inner class ); // end call to addActionListener container.add( enterField, BorderLayout.NORTH ); // create displayArea displayArea = new JTextArea(); container.add( new JScrollPane( displayArea ), BorderLayout.CENTER ); setSize( 300, 150 ); setVisible( true ); } public void runServer() { // set up server to receive connections; // process connections try { // Step 1: Create a ServerSocket. server = new ServerSocket( 5130, 100); c1 = new ServerThread[100]; while ( true ) { // Step 2: Wait for a connection. waitForConnection(); handShake(); displayArea.append("\nHanshake Complete"); //c1[counter] = new ServerThread(connection,counter); //c1[counter].start(); ++counter; } } // process EOFException when client closes connection catch ( EOFException eofException ) { System.out.println( "Client terminated connection" ); } // process problems with I/O catch ( IOException ioException ) { ioException.printStackTrace(); } } private void waitForConnection() throws IOException { displayArea.append( "\nWaiting for connection " ); // allow server to accept a connection connection = server.accept(); displayArea.append( "\nClient connected : Client"); } private void handShake() throws IOException { output = new ObjectOutputStream(connection.getOutputStream() ); output.flush(); String message; input = new ObjectInputStream(connection.getInputStream() ); try { message = (String) input.readObject(); clientList[counter]= message; displayArea.append( "\nClient connected : "+message); for (int i=0; i<=counter;i++ ) { output.writeObject(clientList[i]); output.flush(); } output.writeObject("."); output.flush(); } // catch problems reading from client catch ( ClassNotFoundException classNotFoundException ) { System.out.println( "\nUnknown object type received" ); } catch ( IOException ioException ) { ioException.printStackTrace(); } } public static void main( String args[] ) { ServerChat application = new ServerChat(); application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); application.runServer(); } }
Java Code:import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ServerThread extends Thread { private Socket connection; private ObjectOutputStream output; private ObjectInputStream input; private int counter; public ServerThread(Socket con,int count) { connection = con; counter = count; } public void run() { try { getStreams(); processConnection(); } // process EOFException when client closes connection catch ( EOFException eofException ) { System.out.println( "Client terminated connection" ); } // process problems with I/O catch ( IOException ioException ) { ioException.printStackTrace(); } } private void getStreams() throws IOException { // set up output stream for objects output = new ObjectOutputStream(connection.getOutputStream() ); // flush output buffer to send header information output.flush(); output.writeObject( "SERVER>>> Connection successful"); output.flush(); } private void processConnection() throws IOException { // send connection successful message to client String message = "SERVER>>> Connection successful"; output.writeObject( message ); output.flush(); } private void closeConnection() throws IOException { ServerChat.displayArea.append( "\nUser terminated connection" ); output.close(); input.close(); connection.close(); } }
Last edited by pappyj77; 08-25-2011 at 04:56 AM.
-
Can you post a more code? Especially code unrelated to the problem.
- 08-24-2011, 09:34 PM #3
Member
- Join Date
- Jul 2011
- Location
- kent, UK
- Posts
- 47
- Rep Power
- 0
please what do you mean by a more code? and how you create that? thank you.
- 08-24-2011, 09:56 PM #4
How about less code. Can you make a small program that has some GUI and a JList and show what your problem is?
The rest of the code is not needed for solving your problem.
- 08-24-2011, 11:18 PM #5
Member
- Join Date
- Jul 2011
- Location
- kent, UK
- Posts
- 47
- Rep Power
- 0
am sorry, i dont understand, i need some kind of logic or snippet to do this, its not just the GUI problem, thank you
- 08-24-2011, 11:26 PM #6
Can you write a small, complete program that demonstrates your problem? No one wants to go through all the code you posted.
- 08-25-2011, 12:24 AM #7
Member
- Join Date
- Jul 2011
- Location
- kent, UK
- Posts
- 47
- Rep Power
- 0
hi i have reduced the codes... dont know if it is still too much, but i have tried to capture my main concern as much as possible. thank you.
- 08-25-2011, 12:28 AM #8
Do you have a script that demonstrates the problem when your code is executed? Something automatic that will not require user intervention.
- 08-25-2011, 12:38 AM #9
The code you posted is missing lots of ending }s.
It does NOT compile.
- 08-25-2011, 05:02 AM #10
Member
- Join Date
- Jul 2011
- Location
- kent, UK
- Posts
- 47
- Rep Power
- 0
- 08-25-2011, 03:34 PM #11
Member
- Join Date
- Jul 2011
- Location
- kent, UK
- Posts
- 47
- Rep Power
- 0
help anybody?
- 08-25-2011, 03:43 PM #12
How do you execute the code to show the problem?
Do you have a script that demonstrates the problem when your code is executed? Something automatic that will not require user intervention.
- 08-25-2011, 03:56 PM #13
Member
- Join Date
- Jul 2011
- Location
- kent, UK
- Posts
- 47
- Rep Power
- 0
All three programs posted should be in separate files in same folder. compile and run the serverChat first and then compile and run the ClientChat.
But run the ClientChat with a name like this:(java ClientChat pappyj)
You have to run the ClientChat with 2 separate names simulteneusly to see the problem.
thank you for your response.
- 08-25-2011, 04:04 PM #14
Please explain what the problem is.
I have merged the code for ease of testing and am using the following code to test it.
Java Code:Thread t = new Thread(new Runnable() { public void run() { ServerChat serverApp = new ServerChat(); serverApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); serverApp.runServer(); } }); t.start(); Thread t1 = new Thread(new Runnable() { public void run() { ClientChat clientApp; clientApp = new ClientChat( "127.0.0.1", 5130, "Norm"); //args[0] ); clientApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); clientApp.setVisible(true); //<<<<<<<<<<<<<< clientApp.runClient(); } }); t1.start(); ClientChat clientApp; clientApp = new ClientChat( "127.0.0.1", 5130, "Someone"); //args[0] ); clientApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); clientApp.setVisible(true); //<<<<<<<<<<<<<< NEED THIS clientApp.runClient();
- 08-25-2011, 04:13 PM #15
Member
- Join Date
- Jul 2011
- Location
- kent, UK
- Posts
- 47
- Rep Power
- 0
you will find that while both Client windows are open. Norm would have "Norm" on its userList while someone have "Norm" and "Someone" on its userList.---this is the problem.
they should both have "Norm" and "Someone" on their userList.
- 08-25-2011, 04:19 PM #16
Here is how I would debug your code.
Add lots of printlns to show the execution flow and how the values of variables change. Looking at the print out should show you what is happening.
You will need to add printlns for where the data is being displayed to the textarea so that you can keep the events in sequence and all the debug data in one place.
- 08-25-2011, 04:22 PM #17
Member
- Join Date
- Aug 2011
- Posts
- 18
- Rep Power
- 0
hey paaapy u can see my thread
there ur problem is solved my code is updating user list
- 08-25-2011, 04:25 PM #18
Member
- Join Date
- Jul 2011
- Location
- kent, UK
- Posts
- 47
- Rep Power
- 0
yes thank you i have done that alot and it has helped me alot. but i am thinking my problem is a logical problem, i have just run out of ideas on what to do.
I know its a one way communication from client - server -serverthread - client but i need to get coomunication back like client = server = serverthread = client
thank you.
- 08-25-2011, 04:28 PM #19
The ServerThread class is not used in the posted code.
- 08-25-2011, 04:35 PM #20
Member
- Join Date
- Jul 2011
- Location
- kent, UK
- Posts
- 47
- Rep Power
- 0
Similar Threads
-
Voice chat with multiple chat rooms, suggestions needed
By sonofrage in forum NetworkingReplies: 4Last Post: 03-31-2011, 10:37 PM -
I have created a Java Chat Server, now where do i put it?
By lorenz82 in forum New To JavaReplies: 2Last Post: 03-21-2010, 02:31 PM -
Cannot get my JList to update!
By rangvald in forum AWT / SwingReplies: 1Last Post: 11-17-2009, 01:57 PM -
Help with Java IRC Chat Channel
By sari in forum New To JavaReplies: 1Last Post: 02-03-2009, 07:21 AM -
Java Program chat
By susan in forum Advanced JavaReplies: 1Last Post: 07-25-2007, 09:05 PM
Bookmarks