我是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
。
我真的无法弄清楚这一点。我希望已经清楚了。感谢。