Java 而环路导致崩溃

Java 而环路导致崩溃,java,while-loop,freeze,Java,While Loop,Freeze,所以我在玩一个游戏,发送虚假的数据包,让我的生活像其他孩子一样轻松。问题是,让自动打字机为我发送命令会阻止我与其他玩家聊天 这就是while循环的作用。我试图将代码放入一个无限循环(每半秒调用一次代码),但当我尝试这个过程时,整个游戏都冻结了 我承认,我以前从未使用过while循环,所以可能我对它的理解还不够透彻,但它应该可以工作,不是吗?您可以使用类似于sleep(0.5)的方法来减慢循环速度。在GUI应用程序的主事件处理线程上无法做到这一点。 那里的所有方法都应该做一些事情并快速返回,这样U

所以我在玩一个游戏,发送虚假的数据包,让我的生活像其他孩子一样轻松。问题是,让自动打字机为我发送命令会阻止我与其他玩家聊天

这就是while循环的作用。我试图将代码放入一个无限循环(每半秒调用一次代码),但当我尝试这个过程时,整个游戏都冻结了


我承认,我以前从未使用过while循环,所以可能我对它的理解还不够透彻,但它应该可以工作,不是吗?

您可以使用类似于
sleep(0.5)
的方法来减慢循环速度。

在GUI应用程序的主事件处理线程上无法做到这一点。 那里的所有方法都应该做一些事情并快速返回,这样UI就可以重新绘制,其他事件也可以调度

你要找的是一个计时器,它可以按计划重复工作。您的GUI框架应该提供一个工具来管理这些


这些计时器还避免了“繁忙等待”的需要,这正是循环所做的。即使封锁世界其他地区不会成为问题,这也是对CPU(和电力)的巨大浪费。您可以为“在500毫秒内”安排一个计时器,而不是每隔纳秒左右就查看一次时间

使用
线程睡眠(500)用于使线程睡眠半秒。而不是循环。但是问题出在别的地方

将此while循环放入新线程中。似乎您的循环在主线程内,因此无限循环停止整个程序。

您需要将无限循环中运行的代码放入某个后台线程,与运行其余代码的主线程不同,然后从中获得结果。

但是“我正试图将代码放入无限循环”无限循环冻结你的程序!它冻结了所有程序!除非你在那里加一个延迟,否则会降低它的运行速度。好的,是的。我认为这是必要的,以便能够终止进程。如果我只是使用
System.currentTimeMillis()-lastAction>500
,我就不会有任何关于它何时关闭的输入。对吗?当然我需要一个延迟,这就是为什么我使用
System.currentTimeMillis()-lastAction>500
,这样,在满足该参数之前,它不会做任何事情。你应该在后台线程上运行它,并使用
sleep(0.5)
确保它仅每0.5秒运行一次。就你所拥有的,它以最大的速度运行。就像旁白一样,撞车和冻结是有区别的。崩溃往往意味着抛出错误,冻结是指程序没有响应。将代码放入无限循环不会让游戏引擎的其余部分运行,除非它在另一个线程上运行。新线程:好的。但不要因为忙碌的等待而循环。至少使用线程睡眠。
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();
        }
    }
}