仅在选中复选框时才循环Java循环

时间:2016-04-12 05:07:44

标签: java eclipse while-loop awtrobot windowbuilder

private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 148, 120);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JButton btnStart = new JButton("Start");
    btnStart.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) 
        {
            while(chckbxNewCheckBox.isSelected()){
            try {

                Robot auto = new Robot();


                auto.delay(2300);
                auto.mouseMove(377, 182);
                auto.mousePress(InputEvent.BUTTON3_DOWN_MASK);
                auto.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);
                //
                auto.delay(1000);
                auto.mouseMove(466, 293);
                auto.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                auto.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                //
                auto.delay(1000);
                auto.mouseMove(1061, 217);
                auto.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                auto.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                //
                auto.delay(8000);
                auto.mouseMove(601, 493);
                auto.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                auto.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                //
                auto.delay(60000);
                auto.mouseMove(387, 355);
                auto.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                auto.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                //
                auto.delay(8000);
                auto.mouseMove(705, 652);
                auto.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                auto.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

            } catch (AWTException e) {
                e.printStackTrace();
            }
            }
        }       });
    btnStart.setBounds(10, 47, 89, 23);
    frame.getContentPane().add(btnStart);

    JCheckBox chckbxNewCheckBox = new JCheckBox("New check box");
    chckbxNewCheckBox.setBounds(2, 7, 97, 23);
    frame.getContentPane().add(chckbxNewCheckBox);
}

我想要一些关于将机器人的命令放在循环中的建议,而循环仅在选中复选框时执行。我尝试了几种不同的方法,但似乎都没有。我确定我错过了一些简单但我似乎无法找到它的东西。虽然为我做这件事会有所帮助,但解释它也会很棒。我正在使用eclipse和windowbuilder来添加项目。

2 个答案:

答案 0 :(得分:1)

使用线程:

您可以在其他线程中运行命令。用户界面将在自己的主题中运行。

您可以在新线程中将代码写为;

Class Robot implements Runnable{
  public void run(){
    while(programRunning)){
    if(checkBox.isSelected())
      {
        //Perform commands.
       }
    else {// you may choose to sleep this thread here as well in case of not selected}
    }
  }

}

programRunning是您可以选择的另一个变量,以便即使未选中该复选框且UI仍在运行,也可以保持循环运行。

答案 1 :(得分:0)

您可以这样做:

while(CheckBox.isSelected()) {
    // do the stuff
}

更新:我现在明白了这个问题。在单独的线程中运行长期任务是很好的,所以在这里你可以使用SwingWorker来执行任务。如果您不使用线程,那么UI就会被while循环挂起