java中 按钮触发循环事件后 所有按钮都不响应了

来源:百度知道 编辑:UC知道 时间:2024/06/09 01:58:11
import java.awt.*;
import java.awt.event.*;

public class ComplexLayouts extends MyFrame implements ActionListener
{
private static Button[] bt =new Button[6];
private static Panel p;
public ComplexLayouts(String str)
{
super(str);
}
/**
* @param args
*/
public static void main(String[] args)
{

// TODO 自动生成方法存根
ComplexLayouts cl = new ComplexLayouts("ComplexLayouts!");

p = new Panel();
p.setBackground(Color.lightGray);
p.add(bt[0]);
p.add(bt[1]);
cl.add(p,BorderLayout.NORTH);
cl.add(bt[2],BorderLayout.WEST);
cl.add(bt[3],BorderLayout.CENTER);

}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == bt[3])
{
System.exit(0);
}
else
{
int i = 0;
while(true)
{
try
{
Thread.sleep(250);

上面两位分析的是对的,看你代码中的这一行:
Thread.sleep(250);
你是采用单线程设计的程序,当执行这一句之后,程序当sleep,如果此时你点击按钮,它当然没有响应了,而且,这种sleep还得无限死循环的执行下去。
需要将这一部分第250毫秒就改变一次颜色的代码放到一个新的线程中执行。

你把需要大量计算的逻辑放到一个单独的线程里面去
点击按钮让线程start()就成

大量计算的需单独线程,才可以不影响界面。