Проблема с обновлением jTextArea

Я пишу программу чата RMI. В моей программе я могу получать и отправлять сообщения, но не могу отображать их в TextArea. Я не уверен, что это за ошибка. Я также пробовал использовать метод Event Dispatch. Это не помогает.

public class client extends javax.swing.JFrame implements inter {

public client() {
    initComponents();
}


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    try {
        final inter i = (inter) Naming.lookup("rmi://localhost:1111/client1");
        final String msg = jTextField1.getText();
        if (msg.length() > 0) {
            jTextArea1.append("Me :" + msg);
            java.awt.EventQueue.invokeLater(new Runnable() {

                public void run() {
                    try {
                        i.rcvMsg("Client 1 : " + msg);
                    } catch (RemoteException ex) {
                    }
                }
            });


        }
    } catch (RemoteException ex) {
     } catch (NotBoundException ex) {
     } catch (MalformedURLException ex) {
     }
}                                        

 public void rcvMsg(String msg) {
    final String s = msg;
    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            System.out.println("server called");
            System.out.println(s);
            jTextArea1.append(s);
            System.out.println("client msg" + java.awt.EventQueue.isDispatchThread());
            jTextArea1.update(jTextArea1.getGraphics());
        }
    });
}

public static void main(String args[]) {
    try {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new client().setVisible(true);
            }
        });
        client c2 = new client();
        inter stub = (inter) UnicastRemoteObject.exportObject(c2, 0);
        Registry registry = LocateRegistry.createRegistry(1113);
        registry.bind("client2", stub);
    } catch (AlreadyBoundException ex) {
    } catch (AccessException ex) {
    } catch (RemoteException ex) {
    }
}
}

Пожалуйста помоги...


person rgksugan    schedule 18.10.2010    source источник
comment
может быть, ваши пустые операторы catch скрывают некоторую информацию?   -  person Denis Tulskiy    schedule 18.10.2010
comment
нет... я только что удалил код, чтобы опубликовать тему в stackoverflow..   -  person rgksugan    schedule 18.10.2010


Ответы (2)


просто обмен некоторой информацией с помощью getGraphics() не приветствуется и может вызвать проблемы,

jTextArea1.update(jTextArea1.getGraphics());

и я также создал приложение чата с RMI:

Проблема передачи по ссылке в RMI? там также написан клиент, может быть, что было бы полезно для вас.

person static void main    schedule 18.10.2010

В main после создания c2 вызовите c2.setVisible(true);

Код в rcvMsg вызывается для экземпляра c2 client. Поскольку экземпляр c2 никогда не делается видимым, вы не видите никаких изменений.

Вероятно, вы хотите, чтобы клиент подключался к серверу, а не напрямую к другому клиенту. Клиент-клиент будет работать для 2 конечных точек. Но что произойдет, если вы захотите добавить третий? Четвертый? Вам действительно нужен server, который будет выступать в качестве посредника для всех клиентов.

person Devon_C_Miller    schedule 18.10.2010