Java 当我在ActionListener中使用while时,它就停止了

Java 当我在ActionListener中使用while时,它就停止了,java,swing,jbutton,actionlistener,Java,Swing,Jbutton,Actionlistener,当我点击startbtn按钮时,整个程序刚刚停止,我无法处理任何事情 怎么了?问题是,当您将变量isRun设置为true时,程序进入而不退出循环。这发生在GUI正在运行的同一线程中,因此它变得不负责任,并且无法处理任何其他事件(如单击以通过将isRun设置为false停止运行操作) 因此,解决方案是在另一个线程中运行,同时运行循环任务,让GUI运行的线程可以自由处理更多事件 要在另一个线程中运行任务,我建议您使用并发框架中的任何类,例如 更进一步说,如果您的目的是提交可能被取消的任务,您甚至可以

当我点击
startbtn
按钮时,整个程序刚刚停止,我无法处理任何事情


怎么了?

问题是,当您将变量
isRun
设置为
true
时,程序进入
而不退出循环。这发生在GUI正在运行的同一线程中,因此它变得不负责任,并且无法处理任何其他事件(如单击以通过将
isRun
设置为
false
停止运行操作)

因此,解决方案是在另一个线程中运行
,同时运行
循环任务,让GUI运行的线程可以自由处理更多事件

要在另一个线程中运行任务,我建议您使用并发框架中的任何类,例如

更进一步说,如果您的目的是提交可能被取消的任务,您甚至可以使用


另外,请记住,使用一些同步机制来确保两个线程都能看到分配给
isRun

的最新值,如果
runProgram()
方法中没有堆栈跟踪,请将异常堆栈跟踪添加到问题中。不要阻止EDT(事件调度线程)。发生这种情况时,GUI将“冻结”。有关详细信息和修复方法,请参阅。
startbtn.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {
        isRun = true;
        while(isRun)
            runProgram();

    }
});

stopbtn.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        isRun = false;
    }
});