while循环导致崩溃
while loop causing crash
boolean bury = false;
long lastAction = 0;
if (inputString.startsWith("::bury")) {
bury = !bury;
while (bury) {
if (System.currentTimeMillis() - lastAction > 500) {
stream.createFrame(122);
stream.method433(atInventoryInterface);
stream.method432(0);
stream.method431(Integer.parseInt(inputString.substring(7))); // Item ID
lastAction = System.currentTimeMillis();
}
}
}
所以我在玩游戏,发送虚假数据包,让我的生活像任何孩子一样轻松。问题是,让自动打字机为我发送命令会阻止我与其他玩家聊天。
这就是 while 循环的用武之地。我试图将代码置于无限循环中(每半秒调用一次代码),但是当我尝试该过程时,整个游戏都冻结了。
我承认,我以前从未使用过 while 循环,所以也许我只是不太了解它,但它应该可以工作,不是吗?
您可以使用 sleep(0.5)
之类的东西来减慢循环速度。
您不能在 GUI 应用程序的主事件处理线程上执行此操作。
那里的所有方法都应该做一些事情并且 return 快速,以便 UI 可以重绘并且可以调度其他事件。
您正在寻找的是一个计时器,它可以按计划进行一些重复的工作。您的 GUI 框架应该提供一种工具来管理这些。
这些计时器还避免了 "busy waiting" 的需要,这就是您的循环正在做的事情。即使封锁世界其他地方不成问题,这也是对 CPU(和电力)的巨大浪费。您可以为 "in 500 milliseconds" 安排一个计时器,而不是在一个紧密的循环中每纳秒左右查看一次时间。
使用Thread.sleep(500);
让线程休眠半秒。而不是循环。但问题出在其他地方!!
将这个 while 循环放在一个新线程中。似乎您的循环在主线程内,因此无限循环停止了整个程序。
您需要将代码 运行 放入某个后台线程的无限循环中,这与主线程不同,主线程的其余代码是 运行,然后从中获取结果。
boolean bury = false;
long lastAction = 0;
if (inputString.startsWith("::bury")) {
bury = !bury;
while (bury) {
if (System.currentTimeMillis() - lastAction > 500) {
stream.createFrame(122);
stream.method433(atInventoryInterface);
stream.method432(0);
stream.method431(Integer.parseInt(inputString.substring(7))); // Item ID
lastAction = System.currentTimeMillis();
}
}
}
所以我在玩游戏,发送虚假数据包,让我的生活像任何孩子一样轻松。问题是,让自动打字机为我发送命令会阻止我与其他玩家聊天。
这就是 while 循环的用武之地。我试图将代码置于无限循环中(每半秒调用一次代码),但是当我尝试该过程时,整个游戏都冻结了。
我承认,我以前从未使用过 while 循环,所以也许我只是不太了解它,但它应该可以工作,不是吗?
您可以使用 sleep(0.5)
之类的东西来减慢循环速度。
您不能在 GUI 应用程序的主事件处理线程上执行此操作。 那里的所有方法都应该做一些事情并且 return 快速,以便 UI 可以重绘并且可以调度其他事件。
您正在寻找的是一个计时器,它可以按计划进行一些重复的工作。您的 GUI 框架应该提供一种工具来管理这些。
这些计时器还避免了 "busy waiting" 的需要,这就是您的循环正在做的事情。即使封锁世界其他地方不成问题,这也是对 CPU(和电力)的巨大浪费。您可以为 "in 500 milliseconds" 安排一个计时器,而不是在一个紧密的循环中每纳秒左右查看一次时间。
使用Thread.sleep(500);
让线程休眠半秒。而不是循环。但问题出在其他地方!!
将这个 while 循环放在一个新线程中。似乎您的循环在主线程内,因此无限循环停止了整个程序。
您需要将代码 运行 放入某个后台线程的无限循环中,这与主线程不同,主线程的其余代码是 运行,然后从中获取结果。