gpt4 book ai didi

java - 在 run() 中,如何在应用程序不崩溃的情况下调用方法 (Java/Android)?

转载 作者:行者123 更新时间:2023-11-29 21:17:10 25 4
gpt4 key购买 nike

我正在尝试制作一个简单的小程序,每秒递增一个数字。在这种情况下,我正在实现一个每秒循环一次并在每次循环时将“土 bean ”加 1 的线程。在返回到显示方法 potatoDisp() 之前,这一切正常。出于某种原因,这会导致我的应用程序崩溃。从 run() 中删除 potatoDisp() 可解决问题,但显示不会随着“potato”的增加而更新。

public int potato = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
potatoDisp();
start();
}

public void potatoDisp() {
TextView text = (TextView) findViewById(R.id.textView1);
text.setText("You currently have " + potato + " potatoes");
}

public void start() {
Thread thread = new Thread(this);
thread.start();
}

@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
return;
}
potato++;
potatoDisp();
}
}

如果有帮助,我正在为 Android 应用程序执行此操作。我曾尝试寻找答案,但当涉及到线程的正确工作方式时,我很迷茫。

最佳答案

你需要一个像这样的可运行/处理程序:

private Runnable potatoRun = new Runnable() {
@Override
public void run () {
potatoDisp();
}
};

然后改变

potatoDisp();

到:

runOnUiThread(potatoRun);

当您不在 UI 线程上时,您无法更新 View 。

关于java - 在 run() 中,如何在应用程序不崩溃的情况下调用方法 (Java/Android)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21122606/

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