java - 使用 MouseListener 开始或结束无限循环

标签 java eclipse swing jframe awt

我想让鼠标单击开始一个循环,报告鼠标的位置,直到单击鼠标。我在开始循环和报告位置时没有遇到任何问题,但即使 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/

相关文章:

java - 如何使用使用json对象获取数据并显示在listview中?

java - Java中JToggle选择状态下的滑动抽屉动画?

java - 不兼容类型 Piece 无法转换为 java 中的 mouselistener

java - 如何更新jpa实体管理器中的特定实体/行

android - 找不到兼容的目标

java - 无法执行目标 org.apache.maven.plugins :maven-surefire-plugin:2. 12.4:测试(默认测试)

java - 在屏幕上移动对象

java - 在 JOptionPane 中对齐字符串

java - Jersey 2 servlet 404 问题

java - Volley GET 并将 JSONObject 请求发布到 TextView 中的 API View