Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的计时器怎么了?_Java_Timer - Fatal编程技术网

Java 我的计时器怎么了?

Java 我的计时器怎么了?,java,timer,Java,Timer,我有一个计时器,如果你的人在挨饿,我希望它每10秒减去一点健康值,如果他在挨饿,我希望它每10秒减去一点健康值,但是一旦计时器启动,它就会移除健康值,我做错了什么 这是显示结果的输出。它会在10秒之前消除生命值 以下是我的计时器代码: ` 导入java.awt.Color; 导入java.awt.Font; 导入java.awt.Graphics; 导入java.util.Timer; 导入java.util.TimerTask; 公共类GUI{ 公共空白勾号(){ 如果(玩家饥饿){ 定时器=

我有一个计时器,如果你的人在挨饿,我希望它每10秒减去一点健康值,如果他在挨饿,我希望它每10秒减去一点健康值,但是一旦计时器启动,它就会移除健康值,我做错了什么

这是显示结果的输出。它会在10秒之前消除生命值

以下是我的计时器代码:

`

导入java.awt.Color;
导入java.awt.Font;
导入java.awt.Graphics;
导入java.util.Timer;
导入java.util.TimerTask;
公共类GUI{
公共空白勾号(){
如果(玩家饥饿){
定时器=新定时器();
int begin=0;//计时器在1秒后启动。
int timeinterval=10*1000;//计时器每10秒执行一次。
timer.scheduleAtFixedRate(新TimerTask(){
@凌驾
公开募捐{
//此代码在timeinterval定义的每个间隔执行(例如10秒)
//并在begin定义的x毫秒后开始。
Player.health=Player.health-1;
System.out.println(Player.health);
}
},开始,时间间隔);
}
}
公共空间渲染(图形g){
Font menuFont=新字体(“SansSerif”,Font.PLAIN,18);
g、 setFont(menuFont);
g、 setColor(Color.green);
g、 抽绳(货币:+String.valueOf(Player.Money)+“$”,655,25);
g、 setColor(Color.red);
g、 抽绳(“健康:”+String.valueOf(Player.Health)+“/5.0”,10,25);
g、 setColor(Color.white);
g、 抽绳(String.valueOf(Time.globalTime),Engine.WIDTH*Engine.SCALE/2+30,25);

如果(Player.health每次调用render时,您都在启动一个新的计时器,该计时器正在关闭运行状况。您需要确保一个计时器是否已经运行,您不会启动另一个计时器。

问题有点不清楚
当计时器启动时,循环将删除运行状况
,也许您可以编辑该问题以显示随时间变化的实际输出与所需输出它会在计时器完成之前删除所有的健康,你会问为什么你的代码不起作用,为了回答这个问题,我们希望看到的不仅仅是一个片段,而且少于你的整个代码:A。请阅读链接,然后考虑创建一个并在这里完整地用你的问题来张贴。这就是整个代码,这就是B的全部内容。e错。我想知道计时器为什么不工作。这应该就是你所需要了解的问题所在…这段代码对我来说很好。它等待1秒,然后每10秒就停止一次运行。因此,当我告诉计时器你有最新的代码吗?它应该是计时器。取消()
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.util.Timer;
import java.util.TimerTask;

public class GUI {

    public void tick() {
        if(Player.starving) {
            Timer timer = new Timer();
            int begin = 0; //timer starts after 1 second.
            int timeinterval = 10 * 1000; //timer executes every 10 seconds.
            timer.scheduleAtFixedRate(new TimerTask() {
              @Override
              public void run() {
                //This code is executed at every interval defined by timeinterval (eg 10 seconds) 
               //And starts after x milliseconds defined by begin.
                    Player.health = Player.health - 1;
                    System.out.println(Player.health);
              }
            },begin, timeinterval);
        }
    }

    public void render(Graphics g) {
        Font menuFont = new Font( "SansSerif", Font.PLAIN, 18);

        g.setFont(menuFont);

        g.setColor(Color.green);    
        g.drawString("Money: " + String.valueOf(Player.money) + " $", 655, 25);

        g.setColor(Color.red);
        g.drawString("Health: " + String.valueOf(Player.health) + " / 5.0", 10, 25);

        g.setColor(Color.white);
        g.drawString(String.valueOf(Time.globalTime), Engine.WIDTH * Engine.SCALE / 2 + 30, 25);

        if(Player.health <= 0) {
            g.setColor(Color.black);
            g.fillRect(0, 0, Engine.WIDTH, Engine.HEIGHT);

            g.setColor(Color.white);
            g.drawString("Your pet is dead :'(", Engine.WIDTH * Engine.SCALE / 2 - 75, Engine.HEIGHT * Engine.SCALE / 2);
        }
        tick();
    }
}