![](/img/trans.png)
[英]How to wait until four different methods finishes and then execute another different method in Android/Java
[英]Java - wait in for loop until method finishes, then continue
我需要运行一个for
循环,其中使用计数器变量i
设置JLabel
的文本,然后调用Timer
方法。 我现在希望循环等到方法完成。
代码:
public void actionPerformed(ActionEvent arg0) {
for (int i = 1; i < 6; i++) {
labelNr.setText(Integer.toString(i));
startTimer();
}
}
因为它现在所做的是立即将JLabel
的文本设置为 5,因为它运行在循环中,但仅在第一个循环中启动计时器。
我希望JLabel
的文本在第一个循环中为 1,然后调用 Timer 方法,然后为第二个循环为 2,再次为 Timer,第三个循环为 3,依此类推。
它基本上只需要等到startTimer()
方法完成执行。 我知道 synchronized 是可能的解决方案,但我不知道如何正确实施它...
提前致谢。
好的,因为我想要一个快速而肮脏的答案,所以被否决了。 那么这个怎么样:
public void actionPerformed(ActionEvent arg0) {
changeLabelAndExecuteTask(1)
}
public void changeLabelAndExecuteTask(int i){
labelNr.setText(Integer.toString(i));
startTimer(i);
}
public void startTimer(final int i){
//start a timer here
new Timer().schedule(new TimerTask(){
@Override
void run(){
methodTimerCall(i)
}}, 0);
}
public void methodTimerCall(int i){
//execute things here
if(++i < 6){
changeLabelAndExecuteTask(i);
}
}
您可以添加一个静态布尔值并通过计时器重置它的值:
bool waitForTimer = false;
public void actionPerformed(ActionEvent arg0) {
for (int i = 1; i < 6; i++) {
waitForTimer = true;
labelNr.setText(Integer.toString(i));
startTimer();
while(waitForTimer){}
}
}
public void startTimer(){
//start a timer here
}
public void methodTimerCall(){
//execute
waitForTimer = false;
}
一种有效的方法可能是将代码放在 for 循环中的单独方法中,并让“startTime()”方法在执行结束时调用此方法。这样可以保证它在方法完成时准确运行, 而不是在任意时间(即使用 Thread.sleep();)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.