有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在一定时间后执行几行程序

我想在几秒钟后执行几行程序。这是怎么做到的

我已经试过了,但没用。灯应该在一定的秒数后打开和关闭

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

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) 个答案

  1. # 1 楼答案

    我可以在你的代码中看到一个语法错误。你错过了关闭计时器。计划(正确地使用大括号代替括号。请更新

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

    Snipplet: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");
      }
    }
    
  2. # 2 楼答案

    我理解你的意图是:

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

    你应该在主方法中打开“Tv 1”灯(在Timer.schedule块之外)。此外,您还应将未来的两项活动安排为独立任务,并适当延迟,如下所示:

        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);
    

    我希望有帮助