gpt4 book ai didi

java - 可在 while 循环中运行

转载 作者:行者123 更新时间:2023-12-01 17:01:43 24 4
gpt4 key购买 nike

我希望在程序运行时每 5 秒执行一次 run 方法,因此我将其放入 while(true) 循环中。问题是我的应用程序由于这个 while 循环而无法运行。有人可以解释一下如何正确编码此循环以使其始终运行吗?

这是我的代码:

int i=0;    
while(true){
Runnable x = new Runnable(){
@Override
public void run(){
if(my_list_counter <= 0)
return;
random_counter = rand.nextInt(my_list_counter);
make_words_with_letters.add(list_of_letters.get(random_counter));
for(Button b:button_list)
if (b.getText().equals("")){
b.setText(list_of_letters.get(random_counter));
list_of_letters.remove(list_of_letters.get(random_counter));
my_list_counter--;
break;
}

}
};
i++;
Handler handler = new Handler();
//Run the code in runnable x at increasing time intervals of 5 seconds
handler.postAtTime(x, SystemClock.uptimeMillis() + i*5000);

}

显然这里的错误是Runnable需要到达终点才能开始运行。但是,由于它处于 while(true) 循环中,因此它永远无法开始运行。有人知道如何解决这个问题吗?

编辑:感谢 JavaHunter 的新代码,但仍然有一个错误:

int i=0;    

Runnable x = new Runnable(){
@Override
public void run(){
while(true){
if(my_list_counter <= 0)
return;
random_counter = rand.nextInt(my_list_counter);
make_words_with_letters.add(list_of_letters.get(random_counter));
for(Button b:button_list)
if (b.getText().equals("")){
b.setText(list_of_letters.get(random_counter));
list_of_letters.remove(list_of_letters.get(random_counter));
my_list_counter--;
break;
}

}
}
};
i++;
Handler handler = new Handler();
//Run the code in runnable x at increasing time intervals of 5 seconds
handler.postAtTime(x, SystemClock.uptimeMillis() + i*50);

但是这段代码只是卡住了我的应用程序。这是日志猫:

enter image description here

它显示了有关 GC 被阻止的信息,但我不知道这到底意味着什么。有人可以帮忙吗?

最佳答案

你正在做的就是创建无限多个可运行对象(正在被GC)。您应该将 while 循环放在可运行的内部。也许最好将循环条件更改为以下内容(更具可读性):

Runnable x = new Runnable(){
@Override
public void run(){
while(my_list_counter > 0){
random_counter = rand.nextInt(my_list_counter);
make_words_with_letters.add(list_of_letters.get(random_counter));
for(Button b:button_list)
if (b.getText().equals("")){
b.setText(list_of_letters.get(random_counter));
list_of_letters.remove(list_of_letters.get(random_counter));
my_list_counter--;
break;
}
}
}
};

关于java - 可在 while 循环中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27296843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com