【问题标题】:Java: Create a Timer without a GUI [closed]Java:创建没有 GUI 的计时器 [关闭]
【发布时间】:2014-02-26 09:00:07
【问题描述】:

我正在开发一个 IRC Twitch.tv BOT (PircBot),我想实现一个 !uptime 聊天命令,它将显示流在线的时间。

我在谷歌上搜索了一下,我只找到了需要 GUI 的解决方案。

Some1 可以告诉我哪些库好用或给我一些示例代码吗?

我需要显示秒、分钟、小时、天。

首先我考虑做一个正常的计时器,它计数+1秒,但我认为它更容易,并且有一些适当的函数来处理这样的“计数”-计时器,对吧?

任何提示都可以!

谢谢:)

这就是我现在想出的:

在我的主课中,我有一个计时器,我用它来调用:

utimecounttimer();

我的计时器如下所示:

  public void utimecounttimer() {

        uptimetimer.scheduleAtFixedRate(new TimerTask() {
              @Override
              public void run() {
                  if (isstreamlive == true){
                  UptimeCount.Uptimestart();
                  }else{
                      UptimeCount.Uptimestop();
                  }
              }
              }, 1000, 1000);
}

然后我的 UptimeCount 课程就在这里:

public class UptimeCount {

    public static long startTime = 0;
    public static long  OnlineTimeMillis = 0;

    public static float OnlineTimeSec = 0;
    public static float  OnlineTimeMin = 0;
    public static float OnlineTimeHour = 0;
    public static float OnlineTimeDay = 0;



    public static void Uptimestart(){

        if(startTime == 0){
        startTime = System.currentTimeMillis();
        }else


        if(startTime != 0){
        OnlineTimeMillis = System.currentTimeMillis()-startTime;
        OnlineTimeSec = OnlineTimeMillis /1000F;
        OnlineTimeMin = OnlineTimeMillis /(60*1000F);
        OnlineTimeHour = OnlineTimeMillis /(60*60*1000F);
        OnlineTimeDay = OnlineTimeMillis /(24*60*60*1000F);
        }


        System.out.println("Seconds"+OnlineTimeSec);
        System.out.println("Minutes"+OnlineTimeMin);
        System.out.println("Hours"+OnlineTimeHour);
        System.out.println("Days"+OnlineTimeDay);

    }



    public static void Uptimestop(){

        startTime = 0;
        OnlineTimeMillis = 0;       
        OnlineTimeSec = 0;
        OnlineTimeMin = 0;
        OnlineTimeHour = 0;
        OnlineTimeDay = 0;
    }


}

然后,最后但并非最不重要的一点是,我在 Main 类中使用以下行在聊天中获取信息:

if (message.equalsIgnoreCase("!uptime")) {
    sendMessage(channel," Stream is running for: "+UptimeCount.OnlineTimeDay +" Days, "+UptimeCount.OnlineTimeHour +" Hours. "+UptimeCount.OnlineTimeMin +" Minutes and " +UptimeCount.OnlineTimeSec +" Seconds.");
}

我还没有测试它,但我认为我必须格式化浮点数的 ms 输出,然后它应该可以工作,对吧?

【问题讨论】:

  • 如果你会使用 Guava,你有StopWatch
  • 为什么不编写你的自定义线程来不断增加这个时间计数器,并在其中嵌入一个帮助方法,告诉你计时器运行的秒数、分钟数、小时数和天数?将其设置为守护线程,以便在您的主应用程序未运行时它不运行,而仅在主应用程序运行时运行。
  • 使用系统时钟来检测已经过去了多少时间。使用 Joda 库获取要显示的正确值。
  • 我去看看 fge,谢谢。 @Awesome 所以你说我应该按照自己的想法去做一个简单的 +1 计时器?如果是的话,我不明白你所说的“帮助方法”是什么意思或将它作为一个守护线程运行。我对 java 还是很陌生 =P
  • @ted 那行不通。 Bot 一直在线/运行,但它会在在线时自动连接到 Stream,并且它应该在那里开始计数,所以我不确定我是否可以告诉程序从那时起获取系统时间?

标签: java timer


【解决方案1】:

您可以使用Joda Time 表示持续时间和时间:

// at startup of the stream
DateTime startedAt = DateTime.now();

// later
Duration elapsed = new Duration(startedAt, DateTime.now());

并且可以使用in this answer 描述的解决方案来格式化您的输出,以获得人类可读的输出(即“1 小时 2 分钟”)。

还请检查Duration,因为它具有toStandardHourstoStandardMinutes 等方法,可用于显示总小时数/分钟数/等。已过去(即“1 小时 | 62 分钟”)。

【讨论】:

  • Ty,我会试试这个,因为我上面试过的那个不能完全满足我的需要:)
【解决方案2】:
// it will give you  current time in mille seconds

long startTime = System.currentTimeMillis();


// Mill second diffrence 

long  OnlineTimeMillis = System.currentTimeMillis()-startTime;


// time diff in mille seconds since  you are online 

float OnlineTimeSec = OnlineTimeMillis /1000F;

// time diff in Minutes  since  you are  online
float  OnlineTimeMin = OnlineTimeMillis /(60*1000F);

// time diff in Hours  since  you are online
float OnlineTimeHour = OnlineTimeMillis /(60*60*1000F);

// time diff in days  since  you are online  
float OnlineTimeDay = OnlineTimeMillis /(24*60*60*1000F);

【讨论】:

  • 这看起来很有趣。谢谢!我可以把这些东西放在一个方法中,所以我只能在机器人连接到流 IRC 并从那里开始计数时立即调用它?
  • 当用户连接到流 @user3220962 时,将上述内容保留在方法中并在单独的线程中运行?
  • 我猜是吗?将它打包成一个静态的 void xyz(),这样我就可以在机器人每秒连接一次后立即调用它,这样浮点数就会得到更新,或者我对这个的想法是错误的吗?
  • 用你的代码更新你的问题@user3220962
  • 现在就写吧。给我几分钟=)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多