Java:每X秒执行一次操作
我有一个工作的Java程序,我想每X秒在显示器上画一个对象。最好的方法是什么?我曾考虑使用Java:每X秒执行一次操作,java,user-interface,timer,draw,Java,User Interface,Timer,Draw,我有一个工作的Java程序,我想每X秒在显示器上画一个对象。最好的方法是什么?我曾考虑使用for循环和一些sleep语句,但我很好奇是否有更简单或更有效的方法来实现这一点 谢谢。使用Thread,这将每隔xmils在屏幕上绘制一个矩形。这将在运行5次后停止。编辑xMilSeconds表示较慢的运行,编辑j>4表示停止前的运行次数。但它确实冻结了,我无法修复 int i = 0; private long xMilSeconds = 300; private boolean paint; publ
for
循环和一些sleep
语句,但我很好奇是否有更简单或更有效的方法来实现这一点
谢谢。使用Thread,这将每隔xmils在屏幕上绘制一个矩形。这将在运行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();
}
}
}
inti=0;
专用长xMilSeconds=300;
私有布尔图;
公共布尔运行=true;
公共空间涂料(图g)
{
超级油漆(g);
如果(油漆)
{
对于(;i4)
{
运行=错误;
}
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}
最简单的方法是使用
你可能还想通读一遍
因此,您可以理解为什么永远不要使用
,而(true){Thread.sleep(X)}
调用Swing
(在EDT内部)可能会有所帮助。Javadoc展示了示例用法。完成后,别忘了调用shutdown
方法。您签出了吗?使用循环和睡眠将冻结您的应用程序,因此永远不要这样做。感谢您的回复。有没有可能修改一下,比如说,5分钟后,我就停止执行这些操作了?可能的情况是,你需要抓取开始时间,并将其与当前时间进行比较,以确定你已经运行了多长时间,然后呼叫计时器。停止谢谢你的回复。这会调用Timer.stop进入actionPerformed
的内部吗?是的,时间比较也是如此
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();