使用keyListener打破递归函数?

时间:2016-03-10 11:25:43

标签: java function recursion

我已尝试在我的视图类中安装一些keylisteners来终止此方法。但似乎方法不会停止。我不确定如何实际阻止它执行?在执行方法的整个过程中,按钮似乎都被按下了。

 public void method1() {

    try {
        robot = new Robot();
        Compare.captureScreen(800, 550, 200, 50);
        if (Compare.processImage("image.png") == true) {
            robot.mouseMove(890, 576);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
        } else if (Compare.processImage("image.png") != true) {
            if (Compare.file.exists()) {
                Compare.file.delete();
            }
            robot.delay(2000);
            method1();

        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

我尝试过这样的事情:

JButton btnNewButton = new JButton("method1");
    btnNewButton.setFocusable(true);
    btnNewButton.requestFocus();
    btnNewButton.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_ESCAPE){
                System.exit(0);
            }
        }
    });
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            theModel.method1();
        }
    });
    btnNewButton.setBounds(163, 113, 101, 23);
    mainPanel.add(btnNewButton);

1 个答案:

答案 0 :(得分:0)

您在Swing事件调度线程(EDT)上调用长时间运行的代码,完全占用线程并使Swing无响应。这里的解决方案是让你的长期代码在EDT和后台线程中运行关闭