我想让鼠标单击开始一个循环,报告鼠标的位置,直到单击鼠标。我在开始循环和报告位置时没有遇到任何问题,但即使 MouseClicked 方法在单击鼠标两次时结束循环(或者应该),程序也会无限地继续循环。
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++;
}
}
});
最佳答案
您的无限循环发生在 EDT 上(这就是调用监听器的原因),这意味着 Swing 无法处理更多事件。这意味着 mouseClicked 不会再次被调用,这就是 numClicked 不增加的原因。
您需要在单独的线程中关闭无限循环,并让 EDT 仅递增 numClicked。然后,您需要使 numClicked 变得易失,或者更好的是,使之成为 AtomicInteger。
关于java - 使用 MouseListener 开始或结束无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10458518/