使用JButton循环时启动/停止

时间:2017-07-06 02:49:17

标签: java swing jframe jbutton

我正在尝试创建一个具有切换按钮(常规JButton)的程序,在单击时,运行一个while循环,直到再次单击该按钮以停止它。

我已经这样做了,但是,当我点击按钮时,整个JFrame因为它被卡在while循环中而冻结,因为循环将永远运行直到再次按下该按钮。但是,由于JFrame冻结,因此无法再次单击该按钮。按钮本身也只是保持蓝色,因为JFrame在颜色发生变化之前会冻结;就在我点击按钮之前。

我的代码看起来像这样:

   boolean isRunning=false;
   private void buttonClickEvent(ActionEvent evt) {                           
    if(isRunning){
        isRunning=false;
        System.out.println("Stopped running!");
        jButton.setText("Start Running");
    } else { // BELOW IS THE CODE THAT CAUSES IT TO LOCK
        isRunning=true;
        jButton.setText("Stop Routine");
        while(isRunning){
            // DO STUFF
        }
    }

}   

编辑:我尝试执行以下代码(下面),它会打印文本并允许在按钮中进行颜色更改,但之后UI仍然会快速冻结。

boolean isRunning=false;
   private void buttonClickEvent(ActionEvent evt) {                           
    if(isRunning){
        isRunning=false;
        System.out.println("Stopped running!");
        jButton.setText("Start Running");
    } else { // BELOW IS THE CODE THAT CAUSES IT TO LOCK
        isRunning=true;
        jButton.setText("Stop Routine");
                    new Thread(new Runnable() {
            public void run() {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        while(isInRoutine){
                            System.out.println("lolk");
                        }
                    }
                });

            }
        }).start();
    }

}   

0 个答案:

没有答案