gpt4 book ai didi

java - 无法通过更改 boolean 条件来停止线程中的 while 循环

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:45 25 4
gpt4 key购买 nike

我决定为下学期构建一个应用程序框架,以节省制作项目的时间并了解有关 java 的更多信息,我只需要创建一个新的 Application(),向其发送一个窗口和其他要求,然后调用 application.start

应用程序扩展了线程,run() 打开一个 jframe,它是一个自制的控制台,允许我与代码交互,然后进入 while 循环,我将在其中插入时钟代码,就像视频游戏一样。

当我在控制台中输入/exit时,它会调用应用程序中的terminate()函数,该函数会向控制台发送关闭消息,并将 boolean 运行更改为false,完成循环,处理窗口,然后关闭线程,从而关闭程序。

由于某种我的学徒知识水平不知道的原因,循环似乎一直在运行。

通过调用我在控制台中发送回 boolean 运行值的命令,我确定控制台命令退出确实有效,并将 boolean 值更改为 false,但循环仍在继续。我尝试插入 Minecraft 循环,但它也不会停止,即使让线程 hibernate 1 毫秒也能正常工作,并且程序会按预期关闭。

//where the application is started from

public static void main( String[] args ) {

Application app = new Application("Test");

app.start();
}
//Application Class
public class Application extends Thread {

static boolean running;
@Override
public void run() {
if ( true ) {
console.open();
}

while ( running ) {

}

if ( window != null ) {
window.dispose();
}

Console.dispose();

}

public static void terminate() {
Console.input( "Closing ..." );
running = false;

}
}

最佳答案

使用 volatile 变量

    //Application Class
public class Application extends Thread {
private volatile boolean run_T = true;
static boolean running;
@Override
public void run() {
if ( run_T ) {
console.open();
}

while ( run_T ) {

}

if ( window != null ) {
run_T=true;
window.dispose();
}

Console.dispose();

}

public static void terminate() {
Console.input( "Closing ..." );
running = false;

}
}

关于java - 无法通过更改 boolean 条件来停止线程中的 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56880212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com