一定时间后执行几行程序

时间:2019-04-13 21:45:26

标签: java timer

我想在一定数量的秒后执行几行程序。如何做到这一点?

我已经尝试过一些方法,但是无法正常工作。灯应该在一定时间后才能点亮和熄灭。

初学者程序,如果这是一个愚蠢的问题,非常抱歉。

package io.github.zeroone3010.yahueapi;
import org.omg.PortableServer.POAManagerPackage.State;
import java.util.*;
public class looptest 
{
    public static  void main(String args[]) 
    {
        final String bridgeIp = "ip"; 
        final String apiKey = "key"; 
        final Hue hue = new Hue(bridgeIp, apiKey);
        final Room room = hue.getRoomByName("Woonkamer").get();
        int counter = 0;
        boolean loop;
        Timer timer = new Timer();

        new java.util.Timer().schedule( 
        new java.util.TimerTask() 
        {
            int secondsPassed = 0 ;

            public void run() 
            {
                secondsPassed++;
                System.out.println(secondsPassed);
                    room.getLightByName("Tv 1").get().turnOn();
                    if (secondsPassed > 3) // after 3 seconds tv 2 on
                        room.getLightByName("Tv 2").get().turnOn();
                    if (secondsPassed > 11) // after 11 seconds tv 1 and 2 off
                        room.getLightByName("Tv 1").get().turnOff();
                        room.getLightByName("Tv 2").get().turnOff();
            }
        },
        5000
    };          
    {

2 个答案:

答案 0 :(得分:0)

我了解您的意图是:

  • 立即打开“电视1”灯
  • 3秒后打开“电视2”灯
  • 11秒后关闭“电视1”和“电视2”灯

您应该使用主要方法(在​​Timer.schedule块之外)打开“ Tv 1”。此外,您应将两个以后的活动安排为独立的任务,并适当地延迟如下:

    room.getLightByName("Tv 1").get().turnOn();

    Timer timer = new Timer();

    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            room.getLightByName("Tv 2").get().turnOn();
        }
    }, 3000L);

    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            room.getLightByName("Tv 1").get().turnOff();
            room.getLightByName("Tv 2").get().turnOff();
        }
    }, 11000L);

希望对您有帮助。

答案 1 :(得分:0)

我可以在您的代码中看到语法错误。您错过了正确关闭timer.schedule(的过程,使用大括号} 而不是括号。请更新

 new java.util.Timer().schedule( 
        new java.util.TimerTask() 
        {    
            public void run() 
            {
               //........
            }
        },
        5000
        ); 

代码段:Java TimerTask示例

import java.util.Timer;
import java.util.TimerTask;
class Main {
  public static void main(String[] args) {
    System.out.println("Timer Sample!");

         long delayInMilliSeconds = 5000;
         Timer timer = new Timer();

         timer.schedule(new java.util.TimerTask(){
            int secondsPassed = 0 ;
            public void run() 
            {     
              System.out.println("Executed after the delay");
              timer.cancel();
            }
        },delayInMilliSeconds);

     System.out.println("Task run after "+ delayInMilliSeconds +" ms");
  }
}