Welcome to the Java Programming Forums


The professional, friendly Java community. 21,500 members and growing!


The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.


>> REGISTER NOW TO START POSTING


Members have full access to the forums. Advertisements are removed for registered users.

Results 1 to 2 of 2

Thread: Chat application that receives messages and can be deleted

  1. #1
    Junior Member
    Join Date
    Apr 2009
    Posts
    1
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Unhappy Chat application that receives messages and can be deleted

    I have tried to make a chat application that only saves the recieved messages which can then be deleted. I'm having some major problems with it.

    Can anyone please point out or correct my coding. I have tried for ages to get this working but with no joy.

    Client Code
    import java.awt.*;
    import java.awt.event.*;
    import java.io.EOFException;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
     
    import javax.swing.*;
    import javax.swing.event.*;
     
    public class Client extends JPanel
                          implements ListSelectionListener {
        private JList save;
        private DefaultListModel saveList;
     
        private static final String sendString = "Send";
        private static final String deleteString = "Delete";
        private JButton deleteBtn;
        private JTextField enterMsg;   
        private static InetAddress host;
        ObjectOutputStream output;
        ObjectInputStream input;
        String message = "";
     
     
        public Client() {
            super(new BorderLayout());
     
            saveList = new DefaultListModel();
            saveList.addElement("Hi How are you?");
            saveList.addElement("I'm ok. How are the kids?");
            saveList.addElement("Thats good to hear. I will have to give you a call for a meeting soon.");
     
            //Create the list and put it in a scroll pane.
            save = new JList(saveList);
            save.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            save.setSelectedIndex(0);
            save.addListSelectionListener(this);
            save.setVisibleRowCount(5);
            JScrollPane listScrollPane = new JScrollPane(save);
     
            JButton sendBtn = new JButton(sendString);
            SendListener sendListener = new SendListener(sendBtn);
            sendBtn.setActionCommand(sendString);
            sendBtn.addActionListener(sendListener);
            sendBtn.setEnabled(false);
     
            deleteBtn = new JButton(deleteString);
            deleteBtn.setActionCommand(deleteString);
            deleteBtn.addActionListener(new DeleteListener());
     
            enterMsg = new JTextField(100);
            enterMsg.addActionListener(sendListener);
            enterMsg.getDocument().addDocumentListener(sendListener);
            String name = saveList.getElementAt(
            		save.getSelectedIndex()).toString();
     
            //Create a panel that uses BoxLayout.
            JPanel buttonPane = new JPanel();
            buttonPane.setLayout(new BoxLayout(buttonPane,
                                               BoxLayout.LINE_AXIS));
            buttonPane.add(deleteBtn);
            buttonPane.add(Box.createHorizontalStrut(5));
            buttonPane.add(new JSeparator(SwingConstants.VERTICAL));
            buttonPane.add(Box.createHorizontalStrut(5));
            buttonPane.add(enterMsg);
            buttonPane.add(sendBtn);
            buttonPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
     
            add(listScrollPane, BorderLayout.CENTER);
            add(buttonPane, BorderLayout.PAGE_END);
     
        }
     
        class DeleteListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                //This method can be called only if
                //there's a valid selection
                //so go ahead and remove whatever's selected.
                int index = save.getSelectedIndex();
                saveList.remove(index);
     
                int size = saveList.getSize();
     
                if (size == 0) { //Nobody's left, disable firing.
                	deleteBtn.setEnabled(false);
     
                } else { //Select an index.
                    if (index == saveList.getSize()) {
                        //removed item in last position
                        index--;
                    }
     
                    save.setSelectedIndex(index);
                    save.ensureIndexIsVisible(index);
                }
            }
        }
     
        //This listener is shared by the text field and the send button.
        class SendListener implements ActionListener, DocumentListener {
            private boolean alreadyEnabled = false;
            private JButton sendBtn;
     
            public SendListener(JButton button) {
                this.sendBtn = button;
            }
     
            //Required by ActionListener.
            public void actionPerformed(ActionEvent e) {
                String message = enterMsg.getText();
     
                //User didn't type in a unique name...
                if (message.equals("") || alreadyInList(message)) {
                    Toolkit.getDefaultToolkit().beep();
                    enterMsg.requestFocusInWindow();
                    enterMsg.selectAll();
                    return;
                }
     
                int index = save.getSelectedIndex(); //get selected index
                if (index == -1) { //no selection, so insert at beginning
                    index = 0;
                } else {           //add after the selected item
                    index++;
                }
     
                saveList.insertElementAt(enterMsg.getText(), index);
                //If we just wanted to add to the end, we'd do this:
                //listModel.addElement(employeeName.getText());
     
                //Reset the text field.
                enterMsg.requestFocusInWindow();
                enterMsg.setText("");
     
                //Select the new item and make it visible.
                save.setSelectedIndex(index);
                save.ensureIndexIsVisible(index);
            }
     
            protected boolean alreadyInList(String name) {
                return saveList.contains(name);
            }
     
            //Required by DocumentListener.
            public void insertUpdate(DocumentEvent e) {
                enableButton();
            }
     
            //Required by DocumentListener.
            public void removeUpdate(DocumentEvent e) {
                handleEmptyTextField(e);
            }
     
            //Required by DocumentListener.
            public void changedUpdate(DocumentEvent e) {
                if (!handleEmptyTextField(e)) {
                    enableButton();
                }
            }
     
            private void enableButton() {
                if (!alreadyEnabled) {
                	sendBtn.setEnabled(true);
                }
            }
     
            private boolean handleEmptyTextField(DocumentEvent e) {
                if (e.getDocument().getLength() <= 0) {
                    sendBtn.setEnabled(false);
                    alreadyEnabled = false;
                    return true;
                }
                return false;
            }
        }
     
        //This method is required by ListSelectionListener.
        public void valueChanged(ListSelectionEvent e) {
            if (e.getValueIsAdjusting() == false) {
     
                if (save.getSelectedIndex() == -1) {
                //No selection, disable delete button.
                	deleteBtn.setEnabled(false);
     
                } else {
                //Selection, enable the delete button.
                	deleteBtn.setEnabled(true);
                }
            }
        }
     
     
        private static void createAndShowGUI() {
            //Create and set up the window.
            JFrame frame = new JFrame("ListDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            //Create and set up the content pane.
            JComponent newContentPane = new ListDemo();
            newContentPane.setOpaque(true); //content panes must be opaque
            frame.setContentPane(newContentPane);
     
            //Display the window.
            frame.pack();
            frame.setVisible(true);
        }
     
        public void runClient()
        {
           Socket client;
     
           try {
              // Step 1: Create a Socket to make connection.
     
              host = InetAddress.getLocalHost();	//...............
              client = new Socket(host, 50000 );
     
              // Step 2: Get the input and output streams.
              output = new ObjectOutputStream(
                           client.getOutputStream() );
              output.flush();
              input = new ObjectInputStream(
                          client.getInputStream() );
     
              // Step 3: Process connection.
              enterMsg.setEnabled( true );
              do {
                 try {
                    message = (String) input.readObject();
     
                    enterMsg.setCaretPosition(
                    enterMsg.getText().length() );
                 }
                 catch ( ClassNotFoundException cnfex ) {
                 }
     
              } while ( !message.equals( "SERVER>>> TERMINATE" ) );
     
              // Step 4: Close connection.
              output.close();
              input.close();
              client.close();
           }
           catch ( EOFException eof ) {
              System.out.println( "Server terminated connection" );
           }
           catch ( IOException e ) {
              e.printStackTrace();
           }
        }
     
        private void sendData( String s )
        {
           try {
              message = s;
              output.writeObject( "CLIENT1>>> " + s );
              output.flush();
           }
           catch ( IOException cnfex ) {
     
           }
     
        }
     
        class FireListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                //This method can be called only if
                //there's a valid selection
                //so go ahead and remove whatever's selected.
                int index = save.getSelectedIndex();
                saveList.remove(index);
     
                int size = saveList.getSize();
     
                if (size == 0) { //Nobody's left, disable firing.
                    deleteBtn.setEnabled(false);
     
                } else { //Select an index.
                    if (index == saveList.getSize()) {
                        //removed item in last position
                        index--;
                    }
     
                    save.setSelectedIndex(index);
                    save.ensureIndexIsVisible(index);
                }
            }
        }
     
        public static void main(String[] args) {
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }


    Server Code
    import java.awt.*;
    import java.awt.event.*;
    import java.io.EOFException;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    import javax.swing.*;
    import javax.swing.event.*;
     
    public class Server extends JPanel
                          implements ListSelectionListener {
        private JList save;
        private DefaultListModel saveList;
     
        private static final String sendString = "Send";
        private static final String deleteString = "Delete";
        private JButton deleteBtn;
        private JTextField enterMsg;   
        private static InetAddress host;
        ObjectOutputStream output;
        ObjectInputStream input;
        String message = "";
     
     
        public Server() {
            super(new BorderLayout());
     
            saveList = new DefaultListModel();
            saveList.addElement("Hi How are you?");
            saveList.addElement("I'm ok. How are the kids?");
            saveList.addElement("Thats good to hear. I will have to give you a call for a meeting soon.");
     
            //Create the list and put it in a scroll pane.
            save = new JList(saveList);
            save.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            save.setSelectedIndex(0);
            save.addListSelectionListener(this);
            save.setVisibleRowCount(5);
            JScrollPane listScrollPane = new JScrollPane(save);
     
            JButton sendBtn = new JButton(sendString);
            SendListener sendListener = new SendListener(sendBtn);
            sendBtn.setActionCommand(sendString);
            sendBtn.addActionListener(sendListener);
            sendBtn.setEnabled(false);
     
            deleteBtn = new JButton(deleteString);
            deleteBtn.setActionCommand(deleteString);
            deleteBtn.addActionListener(new DeleteListener());
     
            enterMsg = new JTextField(100);
            enterMsg.addActionListener(sendListener);
            enterMsg.getDocument().addDocumentListener(sendListener);
            String name = saveList.getElementAt(
            		save.getSelectedIndex()).toString();
     
            //Create a panel that uses BoxLayout.
            JPanel buttonPane = new JPanel();
            buttonPane.setLayout(new BoxLayout(buttonPane,
                                               BoxLayout.LINE_AXIS));
            buttonPane.add(deleteBtn);
            buttonPane.add(Box.createHorizontalStrut(5));
            buttonPane.add(new JSeparator(SwingConstants.VERTICAL));
            buttonPane.add(Box.createHorizontalStrut(5));
            buttonPane.add(enterMsg);
            buttonPane.add(sendBtn);
            buttonPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
     
            add(listScrollPane, BorderLayout.CENTER);
            add(buttonPane, BorderLayout.PAGE_END);
     
        }
     
        class DeleteListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                //This method can be called only if
                //there's a valid selection
                //so go ahead and remove whatever's selected.
                int index = save.getSelectedIndex();
                saveList.remove(index);
     
                int size = saveList.getSize();
     
                if (size == 0) { //Nobody's left, disable firing.
                	deleteBtn.setEnabled(false);
     
                } else { //Select an index.
                    if (index == saveList.getSize()) {
                        //removed item in last position
                        index--;
                    }
     
                    save.setSelectedIndex(index);
                    save.ensureIndexIsVisible(index);
                }
            }
        }
     
        //This listener is shared by the text field and the send button.
        class SendListener implements ActionListener, DocumentListener {
            private boolean alreadyEnabled = false;
            private JButton sendBtn;
     
            public SendListener(JButton button) {
                this.sendBtn = button;
            }
     
            //Required by ActionListener.
            public void actionPerformed(ActionEvent e) {
                String message = enterMsg.getText();
     
                //User didn't type in a unique name...
                if (message.equals("") || alreadyInList(message)) {
                    Toolkit.getDefaultToolkit().beep();
                    enterMsg.requestFocusInWindow();
                    enterMsg.selectAll();
                    return;
                }
     
                int index = save.getSelectedIndex(); //get selected index
                if (index == -1) { //no selection, so insert at beginning
                    index = 0;
                } else {           //add after the selected item
                    index++;
                }
     
                saveList.insertElementAt(enterMsg.getText(), index);
                //If we just wanted to add to the end, we'd do this:
                //listModel.addElement(employeeName.getText());
     
                //Reset the text field.
                enterMsg.requestFocusInWindow();
                enterMsg.setText("");
     
                //Select the new item and make it visible.
                save.setSelectedIndex(index);
                save.ensureIndexIsVisible(index);
            }
     
            protected boolean alreadyInList(String name) {
                return saveList.contains(name);
            }
     
            //Required by DocumentListener.
            public void insertUpdate(DocumentEvent e) {
                enableButton();
            }
     
            //Required by DocumentListener.
            public void removeUpdate(DocumentEvent e) {
                handleEmptyTextField(e);
            }
     
            //Required by DocumentListener.
            public void changedUpdate(DocumentEvent e) {
                if (!handleEmptyTextField(e)) {
                    enableButton();
                }
            }
     
            private void enableButton() {
                if (!alreadyEnabled) {
                	sendBtn.setEnabled(true);
                }
            }
     
            private boolean handleEmptyTextField(DocumentEvent e) {
                if (e.getDocument().getLength() <= 0) {
                    sendBtn.setEnabled(false);
                    alreadyEnabled = false;
                    return true;
                }
                return false;
            }
        }
     
        //This method is required by ListSelectionListener.
        public void valueChanged(ListSelectionEvent e) {
            if (e.getValueIsAdjusting() == false) {
     
                if (save.getSelectedIndex() == -1) {
                //No selection, disable delete button.
                	deleteBtn.setEnabled(false);
     
                } else {
                //Selection, enable the delete button.
                	deleteBtn.setEnabled(true);
                }
            }
        }
     
     
        private static void createAndShowGUI() {
            //Create and set up the window.
            JFrame frame = new JFrame("ListDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            //Create and set up the content pane.
            JComponent newContentPane = new ListDemo();
            newContentPane.setOpaque(true); //content panes must be opaque
            frame.setContentPane(newContentPane);
     
            //Display the window.
            frame.pack();
            frame.setVisible(true);
     
        }
     
        public void runServer()
        {
           ServerSocket server;
           Socket connection;
           int counter = 1;
     
           try {
              // Step 1: Create a ServerSocket.
              server = new ServerSocket(50000 );
     
              while ( true ) {
                 // Step 2: Wait for a connection.
                 display.setText( "Waiting for connection\n" );
                 connection = server.accept();
     
                 display.append( "Connection " + counter +
                    " received from: " +
                    connection.getInetAddress().getHostName() );
     
                 // Step 3: Get input and output streams.
                 output = new ObjectOutputStream(
                              connection.getOutputStream() );
                 output.flush();
                 input = new ObjectInputStream(
                             connection.getInputStream() );
                 display.append( "\nGot I/O streams\n" );
     
                 // Step 4: Process connection.
                 String message =
                    "SERVER>>> Connection successful";
                 output.writeObject( message );
                 output.flush();
                 enter.setEnabled( true );
     
                 do {
                    try {
                       message = (String) input.readObject();
                       display.append( "\n" + message );
                       display.setCaretPosition(
                          display.getText().length() );
                    }
                    catch ( ClassNotFoundException cnfex ) {
                       display.append(
                          "\nUnknown object type received" );
                    }
                 } while ( !message.equals( "CLIENT>>> TERMINATE" ) );
     
                 // Step 5: Close connection.
                 display.append( "\nUser terminated connection" );
                 enter.setEnabled( false );
                 output.close();
                 input.close();
                 connection.close();
     
                 ++counter;
              }
           }
           catch ( EOFException eof ) {
              System.out.println( "Client terminated connection" );
           }
           catch ( IOException io ) {
              io.printStackTrace();
           }
        }
     
        private void sendData( String s )
        {
           try {
              output.writeObject( "CLIENT2>>> " + s );
              output.flush();
              display.append( "\nCLIENT2>>>" + s );
           }
           catch ( IOException cnfex ) {
              display.append(
                 "\nError writing object" );
           }
        }
     
        public static void main( String args[] )
        {
           Server app = new Server();
     
           app.runServer();
        }
     }//end of Server

    Thanks in advance


  2. #2

    Default Re: Chat client and server, save messages and delete

    Did you get an exception? Can you give us something more specific?

Similar Threads

  1. [SOLVED] web client
    By 5723 in forum File I/O & Other I/O Streams
    Replies: 8
    Last Post: June 10th, 2009, 04:44 PM
  2. Replies: 10
    Last Post: May 8th, 2009, 10:49 AM
  3. Java NullPointer Exception in Server chat program
    By Valtros in forum Exceptions
    Replies: 1
    Last Post: May 8th, 2009, 05:06 AM
  4. Saving .jsp page as .pdf file while generating report for struts based web application
    By ravindra_kumar_tiwari in forum JavaServer Pages: JSP & JSTL
    Replies: 3
    Last Post: August 12th, 2008, 09:32 AM
  5. How to write switch statement inside if statement?
    By Rezz in forum Loops & Control Statements
    Replies: 6
    Last Post: June 11th, 2008, 11:27 AM