You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Java Swing Timer的运行时长(毫秒级)?

解决Java Swing Timer获取运行时长的问题

嘿,我懂你的困扰——Swing的Timer确实没有直接提供value这种获取累计运行时长的属性,但咱们有两种简单靠谱的方式来实现你要的玩家存活时长统计:

方法一:利用系统时间戳(推荐,精度高)

这种方法最直接也最准确,原理是在Timer启动时记录一个起始时间,当玩家死亡时用当前时间减去起始时间,得到的就是精确的毫秒级存活时长。

修改你的代码如下:

public class InvaderPanel extends JPanel implements KeyListener, ActionListener { 
    private int timealive; // 单位:毫秒
    private Timer timer = new Timer(30, this); 
    private long startTime; // 记录Timer启动的时间戳

    public InvaderPanel() { 
        addKeyListener(this); 
        setFocusable(true); 
        startTime = System.currentTimeMillis(); // 启动前记录时间
        timer.start(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
        if(playerdead){ 
            timer.stop(); // 注意这里要加括号!原代码少了括号
            timealive = (int)(System.currentTimeMillis() - startTime); 
            // 如果担心超过int的最大值(2147483647毫秒≈3.5周),可以把timealive改成long类型
        } 
    } 
}

小贴士:如果你的游戏可能运行超过3.5周(虽然大概率不会),建议把timealive改成long类型,避免int溢出。另外,System.nanoTime()比System.currentTimeMillis()精度更高,如果你需要更精准的计时,可以用它,计算时转换成毫秒即可:(System.nanoTime() - startTime) / 1000000。

方法二:维护自定义计数器

如果因为某些原因不想依赖系统时间(比如担心系统时间被手动修改),可以在每次Timer触发时累加延迟时间。不过要注意:Swing Timer的触发间隔不是绝对精确的,所以这种方法会有微小误差,但在游戏场景中通常可以接受。

代码示例:

public class InvaderPanel extends JPanel implements KeyListener, ActionListener { 
    private int timealive; 
    private Timer timer = new Timer(30, this); 
    private int elapsedTime = 0; // 累计计时

    public InvaderPanel() { 
        addKeyListener(this); 
        setFocusable(true); 
        timer.start(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
        if(playerdead){ 
            timer.stop(); 
            timealive = elapsedTime; 
        } else {
            elapsedTime += timer.getDelay(); // 每次触发累加延迟时间
        }
    } 
}

另外补充一点:你之前考虑把Timer的delay改成1ms其实没必要,30ms的间隔对应大约30帧每秒,是很适合游戏UI刷新的频率,改成1ms会给UI线程带来不必要的压力,反而可能导致卡顿。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:32:06