Java:每X秒执行一次操作

我有一个工作的Java程序,我想每隔X秒在显示器上绘制一个对象。 做这个的最好方式是什么? 我正在考虑使用for循环和一些sleep语句,但我很好奇是否有更简单或更有效的方法来解决这个问题。

谢谢。

最简单的方法是使用javax.swing.Timer

 Timer timer = new Timer(X, new ActionListener() { public void actionPerformed(ActionEvent evt) { // Update the variables you need... repaint(); } }); timer.setRepeats(true); timer.setCoalesce(true); timer.start(); 

您可能还想阅读一下

  • 事件调度线程
  • Swing中的并发性

所以你可以理解为什么你不应该在Swing使用while (true) { Thread.sleep(X) }调用(在EDT内部)

ScheduledExecutorService可能会有所帮助。 Javadoc显示了示例用法。 完成后不要忘记调用shutdown方法。

使用Thread,这将在每个XMilSeconds上在屏幕上绘制一个矩形。 这将在5次运行后停止。 编辑xMilSeconds以进行较慢的运行,j> 4表示停止前的运行次数。 它确实冻结了,我无法解决。

 int i = 0; private long xMilSeconds = 300; private boolean paint; public boolean running = true; public void paint(Graphics g) { super.paint(g); if(paint) { for(;i < i+1;) { g.drawRect(i+49,i+49,i+299,i+99); g.setColor(Color.RED); g.fillRect(i+49,i+49,i+299,i+99); } paint = false; } } public void run() { while(running) { try { Thread.sleep(xSeconds); paint = true; repaint(); i++; j++; if(j > 4) { running = false; } } catch(Exception e) { e.printStackTrace(); } } }