Java JButton被卡住,直到建立连接。。。

Java JButton被卡住,直到建立连接。。。,java,swing,jbutton,jtextpane,Java,Swing,Jbutton,Jtextpane,我制作了一个简单的聊天服务器/客户端,但遇到了这个问题 当用户单击该按钮时,我希望该按钮更改为“断开连接”,在JTextPane对象上写入一些内容并进行连接 问题是,在建立连接之前,不会更新任何内容,按钮会被卡住,而且只有在连接之后(大约5-10秒)才会看到对JTextPane对象的任何写入 有什么解决方案/建议吗 connectButton.addActionListener(new ActionListener() { public void actionP

我制作了一个简单的聊天服务器/客户端,但遇到了这个问题

当用户单击该按钮时,我希望该按钮更改为“断开连接”,在JTextPane对象上写入一些内容并进行连接

问题是,在建立连接之前,不会更新任何内容,按钮会被卡住,而且只有在连接之后(大约5-10秒)才会看到对JTextPane对象的任何写入

有什么解决方案/建议吗

        connectButton.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent event) {
            if (!running) {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        connectButton.setText("disconnect");
                    }
                });
                running = true;
                connect();
            } 
            else {
                connectButton.setText("connect");
                running = false;
                disconnect();                   
            }
        }

基本上,您正在阻止事件调度线程,防止它处理绘制请求


查看以了解发生了什么,并考虑使用A在单独的线程中执行连接,特别是如果您在执行连接时以某种方式更新UI。

基本上,您阻塞事件调度线程,防止它在处理其他油漆请求时发生。


查看以了解发生了什么,并考虑使用A在单独的线程中执行连接,特别是如果您在执行连接时以某种方式更新UI。

基本上,您阻塞事件调度线程,防止它在处理其他油漆请求时发生。


查看以了解发生了什么,并考虑使用A在单独的线程中执行连接,特别是如果您在执行连接时以某种方式更新UI。

基本上,您阻塞事件调度线程,防止它在处理其他油漆请求时发生。


查看以了解发生了什么,并考虑使用A在单独的线程中执行连接,特别是如果您在连接执行时以某种方式更新UI。

您的Swing代码是在一个线程中执行的,您的ActhPrimeMeod()方法也是如此。只需启动一个新线程或创建一个runnable并用SwingUtils启动即可。invokeLater():

例如:

javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          //do something
        }
});

Swing代码在单个线程中执行,actionPerformed()方法也是如此。只需启动一个新线程或创建一个runnable并用SwingUtils启动即可。invokeLater():

例如:

javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          //do something
        }
});

Swing代码在单个线程中执行,actionPerformed()方法也是如此。只需启动一个新线程或创建一个runnable并用SwingUtils启动即可。invokeLater():

例如:

javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          //do something
        }
});

Swing代码在单个线程中执行,actionPerformed()方法也是如此。只需启动一个新线程或创建一个runnable并用SwingUtils启动即可。invokeLater():

例如:

javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          //do something
        }
});

我认为你应该为
connect()
使用一个线程,而不是以阻塞方式调用。谢谢,我会尝试…我认为你应该为
connect()
使用一个线程,而不是以阻塞方式调用。谢谢,我会尝试…我认为你应该为
connect()
使用一个线程,我想你应该为
connect()
使用一个线程,而不是用阻塞的方式调用。谢谢,我会试试。。。