当我在ActionListener中使用时,它只是停止了

问题描述 投票:1回答:1
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;
    }
});

当我单击startbtn按钮时,整个程序刚刚停止,我什么也无法处理。

怎么了?

java swing jbutton actionlistener
1个回答
1
投票

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

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

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

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

此外,请记住使用某种同步机制来确保两个线程都看到分配给Future的最新值。

© www.soinside.com 2019 - 2024. All rights reserved.