gpt4 book ai didi

java - 如何使用两个并发线程更新 View Android

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

我有角色和怪物,想要模拟一场战斗。为此,我创建了两个线程,一个用于角色的攻击,另一个用于怪物的攻击。角色和怪物的攻击速度不同,因此它们的线程“等待”时间也会不同。我的方法是这样的(我总结了方法):

public void attack(){

//Character's attack thread
Thread characterAttackThread = new Thread(new Runnable() {
@Override
public void run() {
try {
while(character.getHp()>0 && monster.getHp()>0){
int damage = character.getDamage();
monster.setHp(monster.getHp() - damage);
Thread.sleep(character.getSpeed());
}
if(character.getHp()<=0){
updateScreen("Character died"); //shows message to user
}else{
updateScreen("Monster died"); //shows message to user
}
} catch (Exception e) {
e.printStackTrace();
}
}
});

//Monster's attack thread
Thread monsterAttackThread = new Thread(new Runnable() {
@Override
public void run() {
try {
while(character.getHp()>0 && monster.getHp()>0){
int damage = character.getDamage();
monster.setHp(monster.getHp() - damage);
this.wait(character.getSpeed());
}
Thread.sleep(monster.getSpeed());
} catch (Exception e) {
e.printStackTrace();
}
}
});

characterAttackThread.start();
monsterAttackThread.start();
}

但是当我到达 updateScreen("Message"); 时,我收到错误

Only the original thread that created a view hierarchy can touch its views.

我该怎么做才能解决问题?

提前致谢!

最佳答案

除了 UI 线程之外,您无法从任何其他线程修改 Android 工具包

此链接将为您提供说明:

http://developer.android.com/guide/components/processes-and-threads.html

您可以执行以下操作之一:

  1. 使用 AsyncTask 并通过 onPostUpdate() 函数更新 UI
  2. 在 UI 线程中编写一个处理程序,并从您的线程向其发送消息
  3. 在您的线程中使用以下代码:

    MainActivity.this.runOnUiThread(new Runnable() {

    公共(public)无效运行(){

        Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();

    }

    });

希望这有帮助

关于java - 如何使用两个并发线程更新 View Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31974392/

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