Ich habe einen Thread, der meine Spielschleife behandelt, wenn ich .join() auf diesem Thread die Anwendung nicht mehr reagiert. Ich habe versucht, ein Problem zu beheben, wo die Programme nie an den Code gelangen, I.E der Thread nie endet.Android- Thread.join() verursacht Anwendung zu hängen
System.out.println("YAY");
Mein Thema für das Spiel Loop:
Dieser Thread druckt erfolgreich aus "Game Ended" aber scheint nie zu beenden.
Runnable startGameLoop = new Runnable() {//game loop
@Override
public void run() {
AiFactory ai = new AiFactory();
final Button play = (Button) findViewById(R.id.Play);
final Button pass = (Button) findViewById(R.id.Pass);
while(finish==false){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
currentPlayer = game.getPlayer();
if(currentPlayer.isPlayer()==false){
//System.out.println("passCount:" +game.getPasscount());
ai.decide(nextPlay, game.getPreviousPlayed(), currentPlayer, game.getPasscount());
if(nextPlay.size()!=0){
runOnUiThread(new Runnable(){
public void run(){
changeArrow();
if(nextPlay.size() ==1){
play1Card();
}
else if(nextPlay.size()==2){
play2Card();
}
else if(nextPlay.size()==3){
play3Card();
}
else if(nextPlay.size()==5){
play5Card();
}
}
}
else{
game.addPassCount();
game.nextTurn();
runOnUiThread(new Runnable(){
public void run(){
changeArrow();
}
});
}
}
else if (currentPlayer.isPlayer()==true){
runOnUiThread(new Runnable(){
public void run(){
changeArrow();
play.setClickable(true);
if(game.getPasscount()==3){
pass.setClickable(false);
}
else{
pass.setClickable(true);
}
}
});
}
}
System.out.println("Game Ended");
}
};
starten und den Faden auf dem Hauptthread Beitritt:
Thread myThread = new Thread(startGameLoop);
myThread.start();
try {
myThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("YAY");
}
Zu meinem Verständnis .join() macht den aktuellen Thread warten, bis die neuen Thread vor Ausübung beendet hat.
Sorry, wenn das eine dumme Frage ist, bin ich ziemlich neu im Threading.
Wir brauchen ein wenig mehr Kontext. Woher kommt dieser Aufruf zu 'join()'? Höchstwahrscheinlich tust du dies im UI-Thread, was erklären würde, warum deine App hängt. –
Join tritt in onCreate() in einer Aktivitätsklasse auf –
Ihre App wartet also auf das Beenden eines Threads, bevor die Erstellung der Aktivität beendet wird. Ist das wirklich das, was du tun willst? Wenn nicht, was versuchst du hier? –