Tôi có một chuỗi xử lý vòng lặp trò chơi của mình, khi tôi gọi .join() trên chuỗi này, ứng dụng sẽ ngừng phản hồi. Tôi đã cố gắng khắc phục sự cố trong đó các chương trình không bao giờ nhận được mã, I.E chuỗi không bao giờ kết thúc.Android- Thread.join() khiến Ứng dụng treo
System.out.println("YAY");
Chủ đề của tôi dành cho Game Loop:
chủ đề này thành công in ra "Trò chơi kết thúc" nhưng không bao giờ dường như để kết thúc.
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");
}
};
Bắt đầu và tham gia các chủ đề để các chủ đề chính:
Thread myThread = new Thread(startGameLoop);
myThread.start();
try {
myThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("YAY");
}
Để hiểu biết của tôi .join() làm cho sự chờ đợi thread hiện hành cho đến khi thread mới đã hoàn tất trước khi tiến hành.
Xin lỗi nếu đây là một câu hỏi ngu ngốc, tôi khá mới mẻ khi đọc.
Chúng tôi cần thêm một chút ngữ cảnh. Trường hợp cuộc gọi này đến 'join()' xảy ra. Nhiều khả năng bạn đang làm điều này trên chuỗi giao diện người dùng, điều này sẽ giải thích lý do ứng dụng của bạn bị treo. –
tham gia xảy ra trong onCreate() trong Lớp Hoạt động –
Vì vậy, ứng dụng của bạn đang chờ một chuỗi chấm dứt trước khi kết thúc việc tạo Hoạt động. Đây có phải là * thực sự * những gì bạn muốn làm không? Nếu không, những gì * là * bạn đang cố gắng làm ở đây? –