J'ai récemment codé un programme "Battleship" comme un projet d'école, et maintenant décidé de faire une version portable et mobile du programme. Maintenant, j'ai presque terminé, le seul problème qui me reste est que je veux un checkBox (évidemment sur le thread de l'interface utilisateur) à afficher en permanence si c'est le tour des joueurs à un moment donné. Dans la version de bureau, j'avais l'habitude de le faire dans un fil séparé, donc je ne bloque pas les choses sur le fil principal. Le code est le suivant:Mettre à jour un "checkBox" à partir d'un thread non-interface utilisateur
public void run() {
while (true) {
if (ClientCurrentPlayer.currentPlayer == BattleshipMain.myPlayerNumber) {
BattleshipMain.yourTurn.setChecked(true);
} else if (ClientCurrentPlayer.currentPlayer != BattleshipMain.myPlayerNumber) {
BattleshipMain.yourTurn.setChecked(false);
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Cependant, cela renvoie une exception, en indiquant que je ne peux pas mettre à jour d'autres threads vue que celui qui a créé la vue. Après un peu de recherche, il semble que je pourrais résoudre cela avec runOnUiThread
. Je ne comprends vraiment pas comment je suis censé faire cela, cependant - si je cours ce code sur le thread de l'interface utilisateur, il bloquerait toutes les entrées, non? Et je ne peux pas exécuter le code sur un thread distinct et exécuter la partie setChecked
dans une méthode dans le thread UI, car alors il exécute la méthode sur le mauvais thread, ou je ne peux pas appeler la méthode puisque runOnUiThread
ne peut pas être utilisé dans un contexte statique. Je ne comprends pas, s'il vous plaît aidez-moi. Merci d'avance, cependant! :)