2015-01-21 141 views
0

我想运行一些方法每秒100次。 我该怎么是这样的:Java定时器100次/秒

Timer timer = new Timer(0, new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      time+= 0.001; 
      System.out.println(time); 
      repaint(); 
     } 
    }); 

从输出很明显,计时器比它应该会更快。此外,它正在CPU上收费,所以我怀疑这是正确的方式来做到这一点。如果我设置了new Timer(1, new ActionListener()time+= 0.01;,那么它比应该慢。

任何人都可以帮我解决这个问题吗?我如何每秒执行100次任务?

编辑: 变化:

Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 
    @Override 
    public void run() { 
     time += 0.01; 
     System.out.println(time); 
     repaint(); 
    } 

}, 1, 1); 

不知道它的NetBeans,但输出时间为waaay的。它要么慢或者快。例如输出:

57.07999999999721 
57.08999999999721 
57.09999999999721 
57.10999999999721 
BUILD STOPPED (total time: 24 seconds) 

5.699999999999923 
5.709999999999923 
5.7199999999999225 
5.729999999999922 
5.739999999999922 
BUILD STOPPED (total time: 8 seconds) 

EDIT2: 改为timer.scheduleAtFixedRate,现在工作得很好。 THnx @GeorgeG

+0

为什么不将延迟设置为10? – MadProgrammer 2015-01-22 01:31:09

回答

3

您可以使用Timer.scheduleAtFixedRate并每0.01秒运行一次。

+0

我已经偶然发现了新的Timer()。schedule,但即时通讯设置不当。你能给我举个例子吗? – Vedran 2015-01-21 12:24:34

+0

看看这个。 http://www.tutorialspoint.com/java/util/timer_scheduleatfixedrate.htm基本上你必须定义一个TimerTask,并且这个方法会使它在你定义的每一段时间都执行。 – GeorgeG 2015-01-21 12:27:07

+0

它不适合我。新的Timer();需要int和ActionListener .jdk1.8 – Vedran 2015-01-21 12:34:54

2

您可以使用Thread.sleep(10L)。这将睡眠线程10ms。所以它会每秒执行

+0

重绘时出现问题()需要片刻。因此执行100次需要一秒多的时间。 – Vedran 2015-01-21 12:41:25

0

100倍试试这个:

int i = 100; 

while (i-- > 0) { 
    myMethod(); 
    try { Thread.sleep(10); } catch (Exception e) {} 
} 
+0

repaint()需要一些时间。因此它需要超过一秒才能执行100次.. – Vedran 2015-01-21 12:44:34

1

你可以叫Thread.sleep()到执行的缓慢速度。

+0

repaint()需要一些时间。因此需要超过一秒才能执行100次.. – Vedran 2015-01-21 12:43:46