Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Chat bằng giao diện giữa 2 client, không hiện nội dung lên giao diện được?

    Mình đang gặp vấn đề ở chỗ này mong các bạn giúp đỡ!
    Mình đang viết code chat giữa 2 client dùng multithread 1 thread chuyên nhận 1 thread thì chuyên gưi dữ liệu đi!
    Thread gửi đi thì ok còn thread nhận thì cũng đã nhận đc nhưng mà settext cho textfield thì nó lại ko hiện ra??? có ai biết làm sao ko giúp mình với
    đây là code của mình

    Mã:
    public class Client1 extends javax.swing.JFrame implements Runnable {     public int PORT_GET = 1234;    private ServerSocket serverSocket;    Chat chat;     public Client1() {                initComponents();    }     @SuppressWarnings("unchecked")    // <editor-fold defaultstate="collapsed" desc="Generated Code">                              private void initComponents() {         jPanel1 = new javax.swing.JPanel();        txtEdit = new javax.swing.JTextField();        jScrollPane1 = new javax.swing.JScrollPane();        txtPain = new javax.swing.JTextArea();        bt = new javax.swing.JButton();         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        setTitle("Client 1");         jPanel1.setBackground(new java.awt.Color(255, 255, 255));        jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());        jPanel1.add(txtEdit, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 280, 430, -1));         txtPain.setColumns(20);        txtPain.setRows(5);        jScrollPane1.setViewportView(txtPain);         jPanel1.add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 10, 470, 250));         bt.setText("jButton1");        bt.addActionListener(new java.awt.event.ActionListener() {            public void actionPerformed(java.awt.event.ActionEvent evt) {                btActionPerformed(evt);            }        });        jPanel1.add(bt, new org.netbeans.lib.awtextra.AbsoluteConstraints(380, 320, -1, -1));         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());        getContentPane().setLayout(layout);        layout.setHorizontalGroup(            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 533, javax.swing.GroupLayout.PREFERRED_SIZE)        );        layout.setVerticalGroup(            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)        );         pack();    }// </editor-fold>                             private void btActionPerformed(java.awt.event.ActionEvent evt) {                                           try {            txtPain.setText(txtPain.getText() + "
    " + txtEdit.getText());//chỗ này            ClientPost clientPost = new ClientPost(txtEdit.getText(), 1235);            Thread tt = new Thread(clientPost);            tt.start();        } catch (Exception e) {            e.printStackTrace();        }    }                                       public static void main(String args[]) {        java.awt.EventQueue.invokeLater(new Runnable() {            public void run() {                new Client1().setVisible(true);            }        });        Client1 obj = new Client1();        Thread t = new Thread(obj);        t.start();    }     // Variables declaration - do not modify                         private javax.swing.JButton bt;    private javax.swing.JPanel jPanel1;    private javax.swing.JScrollPane jScrollPane1;    private javax.swing.JTextField txtEdit;    private javax.swing.JTextArea txtPain;    // End of variables declaration                        private void Set(final String str) {//Method dùng để settext        Runnable run  = new Runnable() {            public void run() {                txtPain.append(str);//Set giá trị cho textfield            }        };        SwingUtilities.invokeLater(run);    }     public void run() {        try {            serverSocket = new ServerSocket(PORT_GET);            while (true) {                Socket socket = serverSocket.accept();                //InetAddress ia = socket.getInetAddress();                InputStream is = socket.getInputStream();                if (is.available() > 0) {                    InputStreamReader isr = new InputStreamReader(is);                    BufferedReader br = new BufferedReader(isr);                    String str;                    while ((str = br.readLine()) != null) {                        Set(str);//Set giá trị cho textfield  ----> lỗi bắt đầu từ chỗ này                    }                }            }        } catch (Exception e) {            e.printStackTrace();        }    }}

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cần có phương thức update giao diện. Sau khi set thì giá trị trong textfield đúng như mong đợi nhưng nó chưa update.

    Gọi repaint() sau lệnh set là OK.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •