2

我想让鼠标点击开始一个循环,报告鼠标的位置,直到点击鼠标。我开始循环并报告位置没有问题,但是即使鼠标单击两次鼠标单击方法结束循环,或者应该,程序无限继续循环。

public JFramethingy() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.addMouseListener(new MouseAdapter() {
        int numClicked;
        public void mouseClicked(MouseEvent arg0) {
            numClicked++;
            for (int i = 0; i > -1;) {
                if(i % 1002000 == 0){
                PointerInfo a = MouseInfo.getPointerInfo();
                Point b = a.getLocation();
                int x = (int) b.getX();
                int y = (int) b.getY();
                System.out.println(x + "," + y); 


                }
                if (numClicked > 1){
                    numClicked = 0;
                    i = -3;
                }
                i++;
            }               
        }   
    });
4

2 回答 2

4

您的无限循环正在 EDT 上发生(这就是调用侦听器的原因),这意味着 Swing 不能再处理任何事件。这意味着 mouseClicked 不会再次被调用,这就是为什么 numClicked 没有被递增的原因。

您需要在单独的线程中关闭无限循环,并使 EDT 仅增加 numClicked。然后你需要让 numClicked 变得易变,或者更好的是,一个 AtomicInteger。

于 2012-05-05T03:55:59.397 回答
3

不,不需要直接创建后台线程,因为您可以通过使用 Swing Timer 或 javax.swing.Timer 轻松解决这个问题,因为这正是它所构建的那种情况。

于 2012-05-05T05:38:18.333 回答