Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 鼠标坐标查找器GUI赢得';我跑不好_Java_Jframe_Mouse - Fatal编程技术网

Java 鼠标坐标查找器GUI赢得';我跑不好

Java 鼠标坐标查找器GUI赢得';我跑不好,java,jframe,mouse,Java,Jframe,Mouse,我想用JFrame制作一个程序,允许您启动和停止JLabel,使其不被鼠标光标的最新坐标更新。我不知道我做错了什么。请帮忙,要有礼貌。我是Java新手,所以我忍不住犯了什么愚蠢的错误 代码如下: import java.awt.* ; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class PrintPos extends JFram

我想用JFrame制作一个程序,允许您启动和停止JLabel,使其不被鼠标光标的最新坐标更新。我不知道我做错了什么。请帮忙,要有礼貌。我是Java新手,所以我忍不住犯了什么愚蠢的错误

代码如下:

import java.awt.* ;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class PrintPos extends JFrame {
    private static final long serialVersionUID = 7526472295622776147L;
    public JButton startBtn;
    public JButton stopBtn;
    public static JLabel posLabelX;
    public static JLabel posLabelY;
    static boolean started=false;

    public static void main(String args[]){
        new PrintPos();
    }


    PrintPos() {

        setLayout(new GridLayout(2,2));

        startBtn = new JButton("Start");
        stopBtn = new JButton("Stop");
        posLabelY = new JLabel("X:");
        posLabelX = new JLabel("Y:");

        add(startBtn);
        add(stopBtn);
        add(posLabelX);
        add(posLabelY);

        setSize(200,150);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setLocationRelativeTo(null);

        startBtn.addActionListener(new ActionListener()
        {
          public void actionPerformed(ActionEvent a)
          {
              started = true;
              while(started) {
                    PointerInfo inf = MouseInfo.getPointerInfo();
                    Point p = inf.getLocation();
                    posLabelX.setText(String.valueOf(p.x));
                    posLabelY.setText(String.valueOf(p.y));
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                        return;
                    }
                    }
          }
        });

        stopBtn.addActionListener(new ActionListener()
        {
          public void actionPerformed(ActionEvent e)
          {
              started = false;
          }
        });
    }

        public static void getInfo() {
            while(started) {
                PointerInfo inf = MouseInfo.getPointerInfo();
                Point p = inf.getLocation();
                posLabelX.setText(String.valueOf(p.x));
                posLabelY.setText(String.valueOf(p.y));
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                    return;
                }
                }
        }

}

您正在阻止事件调度线程。EDT负责处理事件和绘制请求,并响应用户输入。当您的
正在
ActionListener
中运行时,EDT无法处理任何新事件,您的程序将“挂起”

请查看以了解更多详细信息

看看 以及一些解决方案的想法


对于一个可运行的示例,请看一看您正在阻止事件调度线程。EDT负责处理事件和绘制请求,并响应用户输入。当您的
正在
ActionListener
中运行时,EDT无法处理任何新事件,您的程序将“挂起”

请查看以了解更多详细信息

看看 以及一些解决方案的想法


对于一个可运行的示例,请查看

您正在阻止事件调度线程,查看更多详细信息和一些解决方案的想法,对于一个可运行的示例,请查看您正在阻止事件调度线程,查看更多详细信息和一些解决方案和可运行示例的想法,看看除了你有用的答案之外,我还犯了哪些(如果有的话)简单的初学者错误需要纠正?我应该更改任何冗余或不正确的语句吗?除了阻止EDT(这是您的主要问题)之外,通常不鼓励从
JFrame
本身扩展,您将自己锁定在一个用例中,
JFrame
本身就有一个足够复杂的结构,并且您没有真正增加任何价值
JPanel
可能是一个更好的起点。您还应该在EDT的上下文中启动UI,有关更多详细信息,请参阅,这将有助于防止线程锁和其他问题出现任何可能的问题。除了您的有用答案之外,我犯了哪些(如果有)简单的初学者错误需要纠正?我应该更改任何冗余或不正确的语句吗?除了阻止EDT(这是您的主要问题)之外,通常不鼓励从
JFrame
本身扩展,您将自己锁定在一个用例中,
JFrame
本身就有一个足够复杂的结构,并且您没有真正增加任何价值
JPanel
可能是一个更好的起点。您还应该在EDT的上下文中启动UI,有关更多详细信息,请参阅,这将有助于防止任何可能的线程锁问题和其他问题