简单的Java Timer程序错误

时间:2014-05-08 13:44:28

标签: java timer reset

您好我一直在尝试执行一个java程序计时器,一旦用户键入一个数字,每次都会重置。我试过创建两种方法并停止另一种但无济于事。请发布任何其他可能的解决方案

import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class Main {

    public static void main(String[] args) {

        while(true)
        {
        Scanner reader = new Scanner(System.in);
        int a=reader.nextInt();

        if(a == 1)
            {
            Timer timer = new Timer("Printer");
            MyTask t = new MyTask();
            timer.schedule(t, 0, 1000);
            }
        else
            {
            Timer timer = new Timer("Printer");
            MyTask t = new MyTask();
            timer.schedule(t, 0, 1000);
            }
        }
    }
}

class MyTask extends TimerTask {
    //times member represent calling times.
    private int times = 0;


    public void run() {
        times++;
        if (times <= 5) {
             System.out.println(""+times);
        } else {
            timer.cancel();
            update();
            //Stop Timer.


        }

    }

    private void update() {
        // TODO Auto-generated method stub

         TimerTask timerTask = new TimerTask() {

                @Override
                public void run() {
                    System.out.println("Updated timer");

                }
            };
            Timer timer = new Timer();
            timer.schedule(timerTask, 1000);
        }

}

更新了

    import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class Main {

    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        while(true)
        {

        int a=reader.nextInt();

            Timer timer = new Timer("Printer");
            MyTask t = new MyTask();
            timer.schedule(t, 0, 1000);
        }
    }
}

class MyTask extends TimerTask {
    //times member represent calling times.
    private int times = 0;


    public void run() {
        times++;
        if (times <= 5) {
             System.out.println(""+times);
        } else {
            this.cancel();
            //Stop Timer.


        }

    }
}

更新其工作任何需要改进的地方?

import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class Main {

    public static Timer timer ; 
    public static int count = 0;

    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);

        while(true)
        {

        int a=reader.nextInt();
                count++;
            stop();
        }
    }

    public static void stop()
    {

        if(count == 1 )
        {
            timer = new Timer("Printer");
            MyTask t = new MyTask();
            timer.schedule(t, 0, 1000);
        }
        else
        {   
            timer.cancel();
            timer = new Timer("Printer");
            MyTask t = new MyTask();
            timer.schedule(t, 0, 1000);
        }
    }

}

class MyTask extends TimerTask {
    //times member represent calling times.
    private int times = 0;


    public void run() {
        times++;
        if (times <= 5) {
             System.out.println(""+times);
        } else {
            this.cancel();
            //Stop Timer.


        }

    }

}

1 个答案:

答案 0 :(得分:1)

您的代码存在很多问题,包括:

  • 您正在使用while循环的每次迭代创建一个新的Scanner对象 - 请勿这样做。 循环之前创建对象。
  • 您不断创建新的Timers和TimerTasks,隐含的假设是每个新的Timers会以某种方式改变前一个,这根本不会发生。
  • 您的if / else子句是不必要的,因为两个代码块都是相同的。
  • 您可以在本地创建所有Timers和TimerTasks,范围有限,防止您的类中的其他代码访问它并尝试更改其状态。
  • 你问的是一个有点模棱两可的问题
  • 并且要求其他人为您提供代码,这是我们不做的家庭作业。