Java:创建一个没有GUI的计时器
我正在开发一个IRC Twitch.tv机器人(PircBot),我想实现一个!正常运行时间命令,该命令将显示流在线的时间长度 我在谷歌搜索了一下,只找到了需要GUI的解决方案 有人能告诉我哪些库适合使用,或者给我一些示例代码吗 我需要显示秒、分钟、小时、天 首先,我想做一个正常的计时器,所有秒都计数+1,但我认为这更容易,并且有一些适当的函数来处理这种“计数”计时器,对吗 任何提示我都可以 谢谢:) 这就是我现在想到的: 在我的主课上,我有一个计时器,我用它来调用:Java:创建一个没有GUI的计时器,java,timer,Java,Timer,我正在开发一个IRC Twitch.tv机器人(PircBot),我想实现一个!正常运行时间命令,该命令将显示流在线的时间长度 我在谷歌搜索了一下,只找到了需要GUI的解决方案 有人能告诉我哪些库适合使用,或者给我一些示例代码吗 我需要显示秒、分钟、小时、天 首先,我想做一个正常的计时器,所有秒都计数+1,但我认为这更容易,并且有一些适当的函数来处理这种“计数”计时器,对吗 任何提示我都可以 谢谢:) 这就是我现在想到的: 在我的主课上,我有一个计时器,我用它来调用: utimecounttim
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;
}
}
然后,最后但并非最不重要的一点是,我会在聊天中获得信息,在我的主课中有以下几行:
if (message.equalsIgnoreCase("!uptime")) {
sendMessage(channel," Stream is running for: "+UptimeCount.OnlineTimeDay +" Days, "+UptimeCount.OnlineTimeHour +" Hours. "+UptimeCount.OnlineTimeMin +" Minutes and " +UptimeCount.OnlineTimeSec +" Seconds.");
}
我还没有测试它,但我想我必须格式化浮点的ms输出,然后它应该可以工作,对吗?可以用来表示持续时间和时间:
// 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);
// at startup of the stream
DateTime startedAt = DateTime.now();
// later
Duration elapsed = new Duration(startedAt, DateTime.now());
并且可以使用所描述的解决方案格式化输出,以获得人类可读的输出(即“1小时2分钟”)
还请检查,因为它有类似于
toStandardHours
,toStandardMinutes
的方法,可用于显示经过的总小时数/分钟数/等(即“1小时62分钟”)。如果可以使用番石榴,您有StopWatch
为什么不编写自定义线程来不断递增此时间计数器,并在其中嵌入一个helper方法,告诉您计时器运行的秒、分钟、小时和天?将其设置为守护进程线程,使其在主应用程序未运行时不运行,而仅在主应用程序运行时运行。使用系统时钟检测经过的时间。使用Joda库获取适当的值以显示。我会查看它,谢谢@太棒了,所以你说我应该按照我的想法做一个简单的+1定时器的事情?如果是的话,我不明白你所说的“helper方法”或作为守护进程线程运行它是什么意思。我对java=P@ted还是相当陌生的,这是行不通的。机器人一直在线/运行,但一旦它在线,它就会自动连接到流,并且它应该开始计数,所以我不确定我是否可以告诉程序从那时开始获取系统时间?这看起来很有趣。谢谢我可以把这些东西放在一个方法中,这样我只能在机器人连接到流IRC时调用它,然后从那里开始计数?将上述内容保留在方法中,并在用户连接到stream@user3220962时在单独的线程中运行?我想是这样吧?将它打包到一个静态void xyz()中,这样我就可以在bot每秒连接时调用它,这样浮动就会得到更新,或者我的想法是错误的?用你的代码@user3220962gon更新你的问题,现在就写吧。给我几分钟,我会试试这个,因为我在上面试过的那一个并不完全符合我的需要:)