gpt4 book ai didi

java - 线程的问题

转载 作者:行者123 更新时间:2023-12-01 13:23:28 25 4
gpt4 key购买 nike

我有一个关于 Java 线程的问题。实际上我已经创建了一个计时器,但是每当我多次单击开始按钮时,程序就会开始快速计数!!

当我第二次按开始时,我希望我的程序以初始速度从零开始。

我试图解决这个问题,但找不到解决方案。

为什么会发生这种情况,是 JVM 内部的问题吗?

这是我的代码..

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;;

public class Timer extends JFrame implements ActionListener
{
private JPanel panel1,panel2;
private JButton button;
private JLabel label;
private int second = 0;
private int mint = 0;
boolean flage = true;

public Timer()
{
super("Timer");
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
setResizable(false);
label = new JLabel();
panel1 = new JPanel(new FlowLayout());
panel1.add(label);

button = new JButton("Start");
panel2 = new JPanel(new FlowLayout());
panel2.add(button);

button.addActionListener(this);

panel1.setBackground(Color.white);
panel2.setBackground(Color.white);

add("Center",panel1);
add("South",panel2);

setVisible(true);
}

public void paint(Graphics g)
{
super.paint(g);
Font myFont = new Font("Elephant", Font.BOLD,34);
g.setFont(myFont);
g.setColor(Color.black);
g.drawString(String.format("%02d",mint)+":"+String.format("%02d", second), 90, 80);
}

public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button)
{
if(flage)
{

mythread a = new mythread();
a.start();
}
}
}

class mythread extends Thread
{
public void run()
{
for(int i=0;i<60;i++)
{
for(int j=0;j<60;j++)
{
second++;
if(second==60)
{
second=0;
mint++;
}
repaint();
doNothing(1000);
}
repaint();
}
}

public void doNothing(int a)
{
try
{
Thread.sleep(a);
}
catch(Exception e)
{

}
}
}

public static void main(String[]args)
{
new Timer();
}
}

谢谢

最佳答案

每次他们按下按钮时,您都会启动一个新线程。

每个线程都对同一个变量进行倒计时(但要小心,由于同步问题,您无法假设其行为方式),因此当您启动更多线程时,您会看到变量计数越来越快。

只需在创建线程时存储对线程的引用,并且当他们按下按钮时,仅生成该线程(如果该线程尚不存在)。

关于java - 线程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21912629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com