日期:2014-05-20  浏览次数:20736 次

java Timer
Java code
Timer timer = new Timer();
tt = new timertask(loginFrame);
Button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent event) {
                try{
                        timer.schedule(tt, 0, 1000*60*loginFrame.getti());
                    }catch(IllegalStateException e){
                        tt.cancel();//取消任务
                        tt = new timertask(loginFrame);//创建新任务
                        timer.schedule(tt, 0, 1000*60*loginFrame.getti());
                    }
            });


通过点击,产生一个任务。如果上一个任务没有完成,则结束上一个任务,并创建一个新的任务。上面的代码可以做到这样吗?
我通过多次调试发现,可能是不能,但自己不确定。想问下大牛,如果要实现我要的效果,代码需要修改吗?如果需要修改,错误出在哪里,该怎么改?或者能够设计这样一个实验,让我实现我要的效果。

------解决方案--------------------
现在应该使用ScheduledExecutorService,提交一个任务返回一个Future。isDone检测是否完成、否则cancel
------解决方案--------------------
你这样写好像不对吧 timer.schedule()这个方法只是每个多长时间就重新执行一次操作 没有判断上一个是否结束的功能吧
------解决方案--------------------
探讨
别沉了,大家帮忙看下啊。

------解决方案--------------------
Java code
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
class Task implements Runnable { ... } // class Task implements Callable {...}
final ScheduledFuture<?> future = scheduler.schedule(new Task(), 10, TimeUnit.SECONDS);
if(!future.isDone()){ future.cancel(); }