为什么我的while循环会冻结我的程序?
gameLoop()正在阻止我的其他程序进程。
while (running) {
if (Key.up) {
player.moveCharacter(1, playerSpeed);
} else if (Key.down) {
player.moveCharacter(2, playerSpeed);
} else if (Key.left) {
player.moveCharacter(3, playerSpeed);
} else if (Key.right) {
player.moveCharacter(4, playerSpeed);
}
}
// listen for log in data
while (true) {
try {
int direction = socketIn.readByte(); // player direction
// sent from server
int px = socketIn.readByte(); // player px
int py = socketIn.readByte(); // player py
String username = socketIn.readUTF(); // player username
player = new Player(direction, px, py, username); // create
break;
} catch (IOException e) {
e.printStackTrace();
break;
}
}
game.gameLoop(player);
game.gameLoop(播放器);如你所见,调用我的游戏循环,然而当它运行时,我的游戏抓住了继续它的其他过程。任何人都可以告诉我为什么会这样吗?我需要把它放在一个线程上吗?
答案 0 :(得分:1)
您正在使用while(true)
,并且离开循环的唯一方法是使用break
,但如果您在与管理GUI的线程相同的线程上拥有该代码,则GUI将冻结,用户将无法登录,因为GUI已被该循环冻结。
解决方案是将该代码设置在与主线程(管理GUI)不同的另一个线程上。
答案 1 :(得分:0)
你使用永远不会错误的while(true)
。因此,循环永远不会中断,您的代码将继续永远重复。
答案 2 :(得分:0)
您正在使用while (true)
,因此它会不断检查密钥状态并执行代码块。而是每隔几秒(或几毫秒)检查一次
答案 3 :(得分:0)
是肯定的。如果你需要保持整个游戏的循环(登录后),那么你需要把它放在自己的线程中。
答案 4 :(得分:0)
我知道我已经迟到了几年,但希望它可以帮助任何人阅读
你可以为你的while循环条件使用一个标志
flag = true;
while(flag){
//some code here
if(condition)
flag = false;
}
if条件是退出循环的条件,即当你突破它时。