我正在使用Swing处理Java。我正在制作绘图应用程序。只要布尔变量设置为true
,它就会有一个不断运行的常量更新循环。循环位于线程内。
它工作正常,但现在我希望循环只在特定时间运行(仅在按下鼠标时),否则不运行。 (因此没有浪费记忆)。
要停止循环,我可以简单地将该变量设置为false
,因此while
循环将退出。但我的问题是,如何在停止后重启循环?将该变量设置回true
将不会重新启动循环,因为该程序已经在该循环之外(我是否正确?)。如果是这样,那么这样做的好方法是什么?
我的循环:
public void run(){
int TICKS_PER_SECOND = 50;
int SKIP_TICKS = 1000 / TICKS_PER_SECOND;
int MAX_FRAMESKIP = 10;
long next_game_tick = System.currentTimeMillis();
int loops;
boolean app_is_running = true;
while( app_is_running ) {
loops = 0;
while( System.currentTimeMillis() > next_game_tick && loops < MAX_FRAMESKIP) {
update();
catch (AWTException e) { e.printStackTrace(); }
next_game_tick += SKIP_TICKS;
loops++;
}
repaint();
}
}
答案 0 :(得分:2)
将循环移动到它自己的方法。然后当你需要停止时,你可以从方法返回。如果你想再回来再次调用该方法。
答案 1 :(得分:0)
如果需要,你可以让鼠标点击处理程序产生线程吗?使用变量来跟踪线程何时运行,因此它知道不重新生成。完成后,只需退出线程即可。这应该在不需要任务时最小化资源。
答案 2 :(得分:-1)
使用递归。在内部调用循环。或者在内部调用方法。
或者您可以将其编码为方法,以便您可以根据需要调用该循环。