I have Character and a Monster, and want to simule a battle. To do so, I created two threads, one with the character's attack, and another with the monster's attack. Character and monster has different attack speed, so their threads "wait" time will be different. My method looks like this (I summed up the method):
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();
}
But when I reach the updateScreen("Message");
I get the error
Only the original thread that created a view hierarchy can touch its views.
What can I do to get the problem solved?
Thanks in advance!