我想编写一个具有两个以上线程的程序,该程序可以移动两个标签。当我单击一个按钮时,它运行良好。但是当我单击相同的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);
}
});
}
}