java多线程swing龟兔赛跑
时间: 2023-12-30 13:24:19 浏览: 30
以下是一个使用Java多线程实现的Swing龟兔赛跑的例子:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Race extends JFrame {
private JLabel rabbitLabel;
private JLabel turtleLabel;
private JButton startButton;
public Race() {
setTitle("龟兔赛跑");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 200);
setLayout(new FlowLayout());
rabbitLabel = new JLabel(new ImageIcon("rabbit.png"));
turtleLabel = new JLabel(new ImageIcon("turtle.png"));
startButton = new JButton("开始赛跑");
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
startRace();
}
});
add(rabbitLabel);
add(turtleLabel);
add(startButton);
}
private void startRace() {
Thread rabbitThread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i <= 100; i += 10) {
rabbitLabel.setLocation(i, rabbitLabel.getY());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
JOptionPane.showMessageDialog(null, "兔子赢了!");
}
});
Thread turtleThread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i <= 100; i += 5) {
turtleLabel.setLocation(i, turtleLabel.getY());
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
JOptionPane.showMessageDialog(null, "乌龟赢了!");
}
});
rabbitThread.start();
turtleThread.start();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Race race = new Race();
race.setVisible(true);
}
});
}
}
```
这个例子使用了Java的Swing库来创建一个窗口,其中包含了兔子和乌龟的图片以及一个开始赛跑的按钮。当点击开始赛跑按钮时,会创建两个线程分别控制兔子和乌龟的移动。每个线程都会在一定的时间间隔内移动对应的图片,直到达到终点位置。当其中一个线程到达终点时,会弹出一个对话框显示谁赢了。