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来添加项目。
答案 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
循环挂起