线程似乎重置其当前状态

时间:2015-03-26 14:01:06

标签: java multithreading udp

我是Java的初学者。最近,我开始使用Eclipse为我的UDP聊天程序添加一些图形。

我正在使用两个类,一个用于发送数据报,另一个用于接收传入的数据报。后者实际上启动一个等待新传入数据报的线程。 我曾经有第三个Chat类,其中包含public static void main(String[] args),以使Send类和Receive类一起工作。这种安排非常有效。

现在,我想让它更加用户友好。我已经构建了一个简单的GUI,但是我遇到了与JButton对象关联的事件处理程序的问题。

//startStop BUTTON
    startStop = new JButton("Confirm");                   
    startStop.addMouseListener(new MouseAdapter() {         
        public void mouseClicked(MouseEvent e) {
            if(!receive.isAlive()) {
                if(send.setAddress(address.getText())) {
                    address.setEditable(false);
                    address.setBackground(Color.green);
                    message.setEnabled(true);
                    sendButton.setEnabled(true);
                    startStop.setText("Stop");
                    receive.start();
                }
                else {
                    address.setBackground(Color.red);
                }
            }
            else {
                address.setEditable(true);
                address.setBackground(Color.white);
                message.setEnabled(false);
                message.setText("");
                sendButton.setEnabled(false);
                startStop.setText("Confirm");
                receive.interrupt();
            }
        }
    });
    startStop.setBounds(309, 7, 89, 23);
    frmChat.getContentPane().add(startStop);

如您所见,click事件处理程序检查Receive对象启动的线程当前是否正在运行。如果是,则线程将被中断。如果不是,则线程将被启动。 现在的问题是,当我执行程序时,按钮不会相应地动作。调试程序并观察isAlive()isInterrupted(),Eclipse会让我暂时看一下这两种方法,但是当调试跳转到另一种方法时,它会说评估期间发生了错误。我正在使用的Receive对象是主类的私有属性,其中包含已发布的代码。

当我按下按钮时,主要课程再次获得控制权,isAlive()isInterrupted()都返回false。 我真的无法弄清楚这一点。我希望已经清楚了。感谢。

0 个答案:

没有答案