编写Java程序一个龟兔赛跑的多线程程序,单击按键以后龟兔开始赛跑
时间: 2023-11-22 19:56:20 浏览: 89
以下是一个简单的Java多线程程序,实现了龟兔赛跑的功能:
```java
public class TurtleRabbitRace extends JFrame implements ActionListener {
private JButton btnStart;
private JTextArea txtOutput;
private JScrollPane scrollPane;
private JPanel panel;
private Rabbit rabbit;
private Turtle turtle;
private boolean raceStarted;
public TurtleRabbitRace() {
super("Turtle and Rabbit Race");
// 创建UI界面
setSize(500, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
btnStart = new JButton("Start Race");
btnStart.addActionListener(this);
txtOutput = new JTextArea();
txtOutput.setEditable(false);
scrollPane = new JScrollPane(txtOutput);
panel = new JPanel();
panel.add(btnStart);
add(panel, BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);
setVisible(true);
}
// 实现ActionListener接口
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnStart) {
if (!raceStarted) {
raceStarted = true;
txtOutput.setText("");
rabbit = new Rabbit(txtOutput);
turtle = new Turtle(txtOutput);
rabbit.start();
turtle.start();
}
}
}
// 兔子线程
class Rabbit extends Thread {
private JTextArea txtOutput;
private int position;
public Rabbit(JTextArea txtOutput) {
this.txtOutput = txtOutput;
position = 0;
}
public void run() {
while (position < 100) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
position += 3;
txtOutput.append("Rabbit: " + position + "\n");
}
txtOutput.append("Rabbit finished the race!\n");
}
}
// 乌龟线程
class Turtle extends Thread {
private JTextArea txtOutput;
private int position;
public Turtle(JTextArea txtOutput) {
this.txtOutput = txtOutput;
position = 0;
}
public void run() {
while (position < 100) {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
position += 1;
txtOutput.append("Turtle: " + position + "\n");
}
txtOutput.append("Turtle finished the race!\n");
}
}
public static void main(String[] args) {
new TurtleRabbitRace();
}
}
```
在这个程序中,我们创建了一个JFrame窗口,包含一个按钮和一个文本框。单击按钮后,我们创建了两个线程,一个是兔子线程,一个是乌龟线程,它们分别模拟了兔子和乌龟的赛跑过程。在每个线程中,我们使用Thread.sleep方法来模拟每个动物移动的时间间隔,并在文本框中输出它们的位置。当任何一个动物到达终点时,我们在文本框中输出相应的消息。
需要注意的是,我们使用了一个boolean变量raceStarted来确保每次只创建一个赛跑的实例。当用户单击按钮以开始比赛时,我们首先检查这个变量是否为false,如果是,就创建两个线程,并将raceStarted设置为true。这样可以避免用户多次单击按钮导致多个比赛实例同时运行的问题。
阅读全文