如何让 main 方法等到我的 Swing 计时器完成执行?



我目前正在研究十字路口的交通控制。我创建了一个处理 4 个灯泡倒计时的方法。倒计时工作正常。该方法的名称是start(int lane),所以我希望将方法放在循环中以运行 10 次,例如:

while (counter<10){
int x = getnextlane(); // first choose a lane to run its timer
start(x); //start running the lane's timer countdown to 0 from 10
//I want the main thread to wait till the start(x) completes before it goes to the next line
system.out.println("lane "+x+" is running"); 
}

我发现当我运行 Gui 时,倒计时开始,但在它变为零之前,println 语句在它之前完成。那是:

output:
lane 1 is running
lane 2 is running
lane 3 is running
lane 4 is running
lane 1 is running
lane 2 is running
lane 3 is running
lane 4 is running
lane 1 is running
lane 2 is running

我想确保计时器在主线程跳转到下一行之前完成。

摆动应用程序是一个 GUI 应用程序。 GUI 应用程序是事件驱动的。 在事件驱动的应用程序中执行此类操作的正确方法是使用事件。

因此,您应该启动计时器,然后从当前方法(您将其描述为"main 方法"(return摆动,以便摆动可以继续处理事件。

当计时器触发时,你调用某个函数来检查你想要检查的任何内容,如果满足所有必要条件,你调用另一个函数,该函数执行一些工作,因为所有这些条件都已满足。

在 GUI 应用程序中,您永远不会坐在某个地方等待某些事情发生,因为当您这样做时,您的整个 GUI 都会被冻结。

此外,从理论上讲,您可以启动线程来完成这项工作,但是您需要小心,因为大多数 GUI 不是线程安全的,这包括 swing,因此您将无法从其他线程调用任何 GUI 方法。

您可以使用线程,线程调度由线程调度程序控制。因此,在正常情况下,您无法保证线程的执行顺序。此外,您可以等到第一个线程未完成。

但是,您可以使用 join(( 等待线程完成其工作。

在您的情况下,您可以将摆动计时器放入 Thread & do Join。

Thread t = new Thread(
new Runnable() {
public void run () {
while (counter<10){
int x = getnextlane(); 
// start(x); 
system.out.println("lane "+x+" is running"); 
}
}
}
);
t.start();
t.join(); 

最新更新