gpt4 book ai didi

java - 在java中持续跟踪时间

转载 作者:行者123 更新时间:2023-12-01 13:37:53 24 4
gpt4 key购买 nike

所以我想制作一个程序,在代码的其他功能可以运行的同时不断跟踪时间。具体来说,对于我的代码,我有 4 个 JButton 和 4 个 JLabels。单击 JButton 后,我希望相应的 JLabel 每隔几秒(假设 5 秒)更新一次其文本。但是,在代码运行时,我希望能够在任何给定时间选择不同的按钮来更新其相应的 JLabel 并停止之前的按钮。我尝试了一些方法,但每次都会遇到两个问题:

  1. JLabel 不会每 5 秒更新一次。
  2. 在单击另一个 JButton 时,我无法单击另一个 JButton。

它们都与这样一个事实有关:一旦单击 JButton,我的代码就会经历无限循环,但我不确定如何解决这个问题。

我是编码新手,所以我对术语的了解非常有限。任何帮助将不胜感激。

以下是单击按钮时发生的情况的代码。 (我在这里和那里更改了几次代码,尝试自行修复,但目前无法修复,它只会给我一个 stackoverflow 错误。):

package maingame;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JLabel;

public class StatButtonListener implements ActionListener
{
private JButton _button;
private ArrayList<JLabel> _jlList;
private static String _clicked;
public StatButtonListener(JButton button, ArrayList<JLabel> jlList)
{
_button = button;
_jlList = jlList;
}

@Override
public void actionPerformed(ActionEvent arg0)
{
_clicked = _button.getText();
Long value = null;
JLabel valueLabel = null;
// to stop an infinite loop
for(int i=0; i < 8; i++)
{
if(_button.getText().equals(_jlList.get(i).getText()))
{
valueLabel = _jlList.get(i+1);
value = Long.parseLong(valueLabel.getText());
}
}
double startTime = System.currentTimeMillis()/1000;
updateStat(value, valueLabel, startTime);


}

public void updateStat(Long value, JLabel valueLabel, double startTime)
{

if(!(value == null || valueLabel == null))
{
if(_clicked.equals(_button.getText()))
{
double endTime=System.currentTimeMillis()/1000;
if((endTime-startTime) >= 1)
{
startTime = System.currentTimeMillis()/1000;
value = value + 3;
valueLabel.setText(value.toString());
}
updateStat(value, valueLabel, startTime);
}
}
}

}

最佳答案

您可以使用前面提到的 Swing-Timers 来做到这一点:

http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html

一旦完成,就会调用actionPerformed()。然后您可以更新任何您想要更新的内容并重新启动它。

<小时/>

或者您可以使用新线程来执行此操作:

http://de.wikibooks.org/wiki/Java_Standard:_Threads

这完全独立运行,不会阻塞主程序 - 并且可能需要您想要更改的对象的句柄。

关于java - 在java中持续跟踪时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21125873/

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