2013-05-14 61 views
0

我正在使用擺動計時器將我的任務延遲一段特定的時間。這個時間間隔由用戶決定。使用擺動計時器來延遲任務

在我的GUI中,我有一個SpinnerDateModel來接受任務執行的時間。

SpinnerDateModel date = new SpinnerDateModel(); 
     JSpinner spinner = new JSpinner(date);   
     frame.getContentPane().add(spinner);    
     Date futureDate = date.getDate(); 

現在,定時器有爭論Timer(int delay, ActionListener task)

ActionListener task = new ActionListener(){ 

        @Override 
        public void actionPerformed(ActionEvent arg0) { 

         //send function 
        } 

       }; 
       Timer timer = new Timer(delay, task); 
       timer.setRepeats(false);     
       timer.start(); 

如何設置這種延遲到用戶指定的時間?

回答

1

對於一些檢查,以防止形成負延遲,是這樣的:

delay=Math.max(0,futureDate.getTime()-System.currentTimeMillis()); 
delay=Math.min(delay,Integer.MAX_VALUE); 
// or: 
// if(delay>Integer.MAX_VALUE) { throw new exception-of-some-sort } 
Timer timer=new Timer((int)delay,task); 

應該做的伎倆。

這將根據從現在直到用戶選擇的(推測未來)日期的毫秒數來計算延遲。

+0

據此,延遲必須是「長」型。但計時器只接受'int' – newbee 2013-05-14 06:38:10

+0

然後將long轉換爲int http://stackoverflow.com/questions/1590831/safely-casting-long-to-int-in-java – 2013-05-14 06:43:19

+1

嗯,我有點期望你做*一些*想着你自己的。回答編輯。 – 2013-05-14 06:45:30