通过更改布尔条件无法停止线程中的while循环

时间:2019-07-04 03:17:33

标签: java

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

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

当我在控制台中键入/ exit时,它将调用Application中的Terminate()函数,该函数的确向控制台发送了关闭消息,并且确实将运行的布尔值更改为false,完成了循环,处理了窗口,然后关闭了线程并因此关闭程序。

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

通过调用我在控制台中发出的命令以发送回Boolean运行值,我确定控制台命令出口确实有效,并将Boolean值更改为false,但是循环继续进行。我尝试将Minecraft循环插入其中,但它也没有停止,即使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;

    }
}

1 个答案:

答案 0 :(得分:0)

使用易失性变量

    //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;

    }
}