【问题标题】:Java Timers and actionlistenersJava 定时器和动作监听器
【发布时间】:2014-11-19 04:40:21
【问题描述】:

Baiscilly,我正在为一个项目制作这款游戏​​,但我不知道如何让计时器工作,这是我的代码尝试。

import java.awt.event.*;
import java.util.Timer;

public class Timers {
    private int timeLeft = 60;
    private void timer() {
        while(timeLeft > 0){
             int delay = 1000;
              ActionListener taskPerformer = new ActionListener() {
                  public void actionPerformed(ActionEvent evt) {
                      timeLeft--;
                  }{
              new Timer(delay, taskPerformer).start();
              };
    };
}
}
}

我不知道我做错了什么或下一步该做什么。除此之外,我还需要创建一个Actionlistener 查看用户的答案是否与预设答案相同。

import javax.swing.*;

import java.awt.event.*;

...

    JTextField Janswer = new JTextField();
    Janswer.setBounds(110, 70, 150, 25);
    newFrame.add(Janswer);
    if Janswer = equations.getanswer(){
        score++;

我想如果我给了这么多,我不妨告诉你从哪里得到答案

public class Equations {
    private static String equation;
    private int answer;
    Problems problem = new Problems();

    public Equations() {
        equation = problem.getFirstNumber() + " " + problem.getSign() + " " + problem.getSecondNumber();
        String sign = problem.getSign();
        if (sign.equals("+"))
            answer = problem.getFirstNumber() + problem.getSecondNumber();
        else if (sign.equals("-"))
            answer = problem.getFirstNumber() - problem.getSecondNumber();
        else if (sign.equals("*"))
            answer = problem.getFirstNumber() * problem.getSecondNumber();
    }

    public static String getEquations() {
        return equation;
    }
    public int getAnswer() {
        return answer;
    }
}

感谢大家为我提供的任何帮助,如果我需要以任何方式更改我的帖子,请告诉我,我是新手!

【问题讨论】:

标签: java swing timer


【解决方案1】:

主要问题是您使用的是while-loop,它会在每次迭代中创建一堆新的Timers,它们都在减少timeLeft 的值。你只需要一个Timer

根据你想做什么,你可以做类似...

ActionListener taskPerformer = new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        System.out.println("Time's up!");
    }
};
new Timer(60 * 1000, taskPerformer).start();

这将在 1 分钟内建立回调,这可以让您定义超时...

知道,如果你想要一个倒数计时器,你可以这样做......

ActionListener taskPerformer = new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        count++;
        if (count >= 59) {
            ((Timer)evt.getSource()).stop();
            System.out.println("Time's up!");
        }
    }
};
new Timer(1000, taskPerformer).start();

基本上从 0 计数到 60 并且每秒更新一次(您必须使用 60 - count 来获得倒计时值)...

详情请见How to use Swing Timers

【讨论】:

  • 试过你的代码,它在 }; 处显示“令牌上的语法错误“;”,. 预期的”;
  • 请参阅 Concurrency in Swing 了解您不应在 Swing 中使用 java.util.Timer 的原因...
  • 我这样做了,但仍然出现错误。这是我使用的确切代码 import java.awt.event.*;导入 javax.swing.Timer;公共类计时器 { 私有 int 分数; ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent evt) { count++; if (count >= 59) { ((Timer)evt.getSource()).stop(); System.out.println("时间到了!你的分数是"); } } };新计时器(1000,taskPerformer).start(); }
猜你喜欢
  • 2014-04-17
  • 1970-01-01
  • 2013-12-24
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
相关资源
最近更新 更多