Tag: timertask

如何在java中打开文件之前等待windows进程完成

我有一个实现了一个监听器,通知我们是否在特定目录中收到一个新文件。 这是通过轮询和使用TimerTask实现的。 现在程序已设置好,一旦收到新文件,它就会调用另一个打开文件的java程序,并validation它是否是正确的文件。 我的问题是,由于轮询在指定的秒数后发生,可能会出现在该目录中复制文件并因此被Windows锁定的情况。 这会引发IOException,因为尝试打开它进行validation的其他java程序不能(“File正被另一个进程使用”)。 有没有办法让我知道Windows何时完成复制,然后调用第二个程序从java进行validation? 如果有人需要它们以帮助我,我将非常乐意发布代码片段。 谢谢

如何在java中实现有效的超时

有n对象执行某些操作。 执行操作后,将更新时间戳。 现在我想实现一个超时线程,它validation时间戳是否早于例如60秒。 我的第一个解决方案是使用一个线程(while-loop + sleep)执行该操作,该线程包含一个包含所有对象(包括最后一个时间戳)的列表。 现在我遇到的问题是,最糟糕的情况是线程需要59秒加上睡眠时间来决定超时。 我正在寻找像Timer这样的解决方案,可以更新延迟时间。 有任何想法吗?

在Timer中调度Java TimerTask时,它是否已经“正在执行”?

我想澄清一下有关TimerTask的内容。 如果您有以下代码: timer.schedule(task, 60000); 如果任务计划在接下来的1分钟内运行,那么任务对象是否已在执行? 因为我的代码中的某个地方我调用了task.cancel()但似乎调用没有阻止 要执行的任务。 我甚至记录了来自调用的返回值,它返回false。 当我阅读取消方法的文档时,我想到了我的问题: 取消TimerTask并将其从Timer的队列中删除。 通常,如果调用没有阻止TimerTask至少运行一次,则返回false。 后续调用无效。 如果调用阻止了计划执行,则返回true,否则返回false。 我相信我在1分钟的延迟之前打电话给cancel()。 但是如何取消返回false, 是[任务]已经执行了吗? 希望你能给我提供线索/提示甚至解释。 谢谢!

服务在onCreate上使用nullpointerexception崩溃

我想检查服务中每5分钟的实际时间,并根据时间静音或取消静音。 早些时候我试图在最后使用一段时间(true)和thread.sleep(300000),但它总是用ANR崩溃,所以我试图使用一个计时器任务,但现在它在线AudioManager audioManager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);之后崩溃了AudioManager audioManager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE); 使用NullPointerException package de.nathan.android.droidschool; import android.app.Service; import android.content.Context; import android.content.Intent; import android.media.AudioManager; import android.os.IBinder; import java.io.File; import java.util.GregorianCalendar; import java.util.Timer; import java.util.TimerTask; /** * Created by nathan on 29.08.13. */ public class MuteService extends Service { Timer myTimer = new Timer(); MyTimerTask myTimerTask= new MyTimerTask(); AudioManager audioManager = […]

如何重新启动TimerTask

我编写了一个通过套接字发送某个TCP消息的任务。 我有一个包含大量消息和一些时间戳的文件,因此我将任务编程为TimerTask,并使用带有第一个消息时间戳的Timer安排它。 完成后,任务运行方法结束,但其关联的线程仍然存在,它不会被取消。 如果我尝试用新的时间重新安排任务,我会得到一个例外,告诉我我不能重新安排调度或取消任务。 我还尝试在重新安排之前取消它,但显然,正如例外所述,它仍然是同样的问题。 我无法使用常量perior安排任务让它重复自己,因为每条消息都有一个时间而且它不是常数。 如何重新安排TimerTask? 顺便说一下,有没有什么方法可以等待任务结束,就像套接字通信一样,当它用就绪方法阻塞直到消息到达为止?

有条件的停止计时器只能第一次使用?

我正在写一个“谁想成为一个百万人”的游戏,我已经完成了所有设置,这只是计时器的一个问题。 游戏的工作方式如下:如果用户得到正确的问题,他/她会继续前进。 如果没有,游戏结束,他们可以选择再次游戏。 当游戏第一次运行它很好并且计时器完成它应该做的事情 – 从30秒开始倒计时,显示秒数。 但是,当用户点击“再次播放”按钮时,前一个计时器继续使用新计时器。 喜欢这个: -timerA在用户输了之前还剩20秒(用a表示)。 -timerB在下次比赛开始时开始(由b表示)。 输出:20a 29b 19a 28b 18a 27b 17a 26b ……. 2a 11b 1a 10b 9b 8b 7b 6b 5b 4b 3b 2b 1b 所以这是我的名为CountDown的计时器类: import java.util.Timer; import java.util.TimerTask; public class CountDown { static Timer timer; public static int seconds = 30; public CountDown() { timer = […]

如何将参数传递给Timertask Run方法

我有一个方法,我希望它可以安排在以后执行。 调度时间和方法的参数取决于用户输入。 我已经尝试过Timers,但我有一个问题。 怎么可能将参数传递给Java TimerTask运行方法? TimerTask timert = new TimerTask() { @Override public void run() { //do something } }

具有非固定延迟的Java计时器

我需要一个基本上每t秒做一次的Timer 。 但我希望能够修改计时器重复任务的计时器周期。 我写了这样的话: public Bot() { timer = new Timer(); timer.schedule(new Task(), 1000, moveTime = 1000); } public class Task extends TimerTask { @Override public void run() { System.out.println(“Time Passed from last repeat:” + movetime) moveTime += 1000; } 因此,在1000ms延迟后,定时器启动并重复每个moveTime ms。 问题是即使我将移动时间增加了1000,计时器总是以初始延迟(1000)运行,但每次定时器调用run()时,移动时间的值movetime增加(2000,3000,4000等run() 。 我错过了什么或者我有什么选择,每隔’t’秒重复一次任务,’t’是可变的? 谢谢。

Java:以随机间隔调度任务

我是Java的新手,我正在尝试生成一个每5到10秒运行一次的任务,所以在5到10之间的任何时间间隔,包括10。 我尝试了几件事但到目前为止没有任何工作。 我最近的努力如下: timer= new Timer(); Random generator = new Random(); int interval; //The task will run after 10 seconds for the first time: timer.schedule(task, 10000); //Wait for the first execution of the task to finish: try { sleep(10000); } catch(InterruptedException ex) { ex.printStackTrace(); } //Afterwards, run it every 5 to 10 seconds, until a […]

在一段时间内运行代码的更好方法

我需要在预定义的时间内运行一些代码,当时间到了需要停止时。 目前我正在使用TimerTask来允许代码执行一段时间,但这会导致代码创建无穷无尽的线程,而这只是效率不高。 还有更好的选择吗? 当前代码; // Calculate the new lines to draw Timer timer3 = new Timer(); timer3.schedule(new TimerTask(){ public void run(){ ArrayList Coords = new ArrayList(); int x = Float.valueOf(lastFour[0]).intValue(); int y = Float.valueOf(lastFour[1]).intValue(); int x1 = Float.valueOf(lastFour[2]).intValue(); int y1 = Float.valueOf(lastFour[3]).intValue(); //Could be the wrong way round (x1,y1,x,y)? Coords = CoordFiller.coordFillCalc(x, y, x1, y1); […]