线程“ AWT-EventQueue-0”中的异常问题

时间:2019-12-29 07:25:23

标签: java

我想编写一个具有两个以上线程的程序,该程序可以移动两个标签。当我单击一个按钮时,它运行良好。但是当我单击相同的Click两次或两次以上时,Eclipse将在线程“ AWT-EventQueue-0”中提示我:Exception。

我是新手,不知道为什么,所以我什么也不能尝试。

如果有人可以帮助我纠正它,我将非常感谢。谢谢。

import java.awt.*;
import java.awt.event.*;

public class Thread_label extends Thread{
    public Label l1, l2;
    static boolean flag = true;
    Thread_label(Label l1,Label l2){
        this.l1 = l1;
        this.l2 = l2;
    }
    public void run() {
        super.run();
        if(flag == true) {
            for(int i=0;i<20;i++) {
                try {
                    l1.setLocation(l1.getX()+10, l1.getY());
                    sleep(1000);    
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        else {
            for(int i=0;i<20;i++) {
                try {
                    l2.setLocation(l2.getX()-10, l2.getY());
                    sleep(1000);    
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    public static void main(String args[]) {
        Label label1 = new Label("Right");
        label1.setForeground(Color.black);
        label1.setBounds(200, 130, 50, 20);

        Label label2 = new Label("Left");
        label2.setForeground(Color.black);
        label2.setBounds(240, 150, 50, 20);

        Button button1 = new Button("RightClick");
        button1.setForeground(Color.black);
        button1.setBounds(200, 200, 80, 40);


        Button button2 = new Button("LeftClick");
        button2.setForeground(Color.black);
        button2.setBounds(100, 200, 80, 40);

        Frame f = new Frame("test");
        f.setSize(500,350);
        f.add(label1);
        f.add(label2);
        f.add(button1);
        f.add(button2);
        f.setLayout(null);
        f.show();

        final Thread_label t1 = new Thread_label(label1,label2);
        final Thread_label t2 = new Thread_label(label1,label2);
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                flag = true;
                t1.start();
            }
        });
        button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                flag = false;
                t2.start();
            }
        });

        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

0 个答案:

没有答案