java - 如何处理两个不同的事件

标签 java swing chat

我正在制作一个简单的聊天 GUI,我已经编写了服务器和 GUI 客户端,我可以从客户端 GUI 向服务器发送消息。

我的问题是从框架上的服务器接收消息。 当我使用无限循环时,框架被锁定。我不知道应该如何拆分该内容才能在 JTextArea 上显示任何消息。 我的问题是: 有没有办法分割帧来处理来自服务器的“发送”和“接收”信息?

我的 GUI 由 JTextFieldJTextAreaJButton 组成。

当按下JButton时,JTextField中的文本将通过以下方式发送到服务器:

String u = jTextField.getText(); 
out.writeUTF(u);

但我不知道我应该做什么来让 JTextArea 减少获取即将到来的信息的时间:

msg = in.readUTF();
jta.append(msg + "\n");

//

线程是否应该是 GUI 类中的类或组件,因为我已经创建了线程,所有东西似乎都在工作,但按摩没有出现在 jTextField 上。我像在服务器中一样在同一文件中创建了线程,但无法正常工作:

    class bacgroundTask extends Thread{
static String msg;
static JTextArea jta;
static DataInputStream in;
public void run(){
        while(true){
            try{
            msg = in.readUTF();
            jta.append(msg + "\n");
            }
            catch(IOException ioe){}}}}

//

嗨,又是我,我尝试使用 invokelater 方法,但执行时帧卡住,我无法单击发送按钮或在 jtextfield 中输入文本。任何人都可以向我解释一下这些方法,以及它们对我的情况是否正确。

我尝试过使用和不使用 while 语句。

       SwingUtilities.invokeLater(
        new Runnable(){
            public void run(){
                while(true){
                try{
                    msg = in.readUTF();
                    jta.append(msg + "\n");
                    jta.revalidate();
                }
                catch(IOException ioe){

                }}}});

最佳答案

您需要在后台线程上运行无限接收循环。

关于java - 如何处理两个不同的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8651107/

相关文章:

java - 在多线程 Java 应用程序中调用已编译的 m 文件(.jar)时出错

java - 当调用新屏幕时,旧屏幕会被处理吗?

c - C中的多线程TCP聊天

ios - 应用商店提交,元数据因聊天室选项而被拒绝

java - 拥有一方的真正含义是什么?

java - 删除 'Allow' 响应 header

java - 无法显示 JTable

java - 无法在 JPanel 上绘图

java - 我是 Java Swing 的新手,一般来说,我今天编写的代码有一个涉及 button.doClick() 方法的奇怪故障。

java - 聊天服务器 : what's the best(optimized) way to save a conversation log