Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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 关闭包含WHILE循环的JFrame_Java_Swing_While Loop_Window_Jframe - Fatal编程技术网

Java 关闭包含WHILE循环的JFrame

Java 关闭包含WHILE循环的JFrame,java,swing,while-loop,window,jframe,Java,Swing,While Loop,Window,Jframe,我是新来的,我有个问题。 几个月前,我制作了一个简单的彩色滴管,可以从屏幕上的任何位置采集颜色。 现在我正在制作一个颜色实用程序,它有很多功能,比如平均颜色生成和混合颜色。无论如何,我认为添加这个滴管会很酷,所以我的JFrame中有一个JButton调用 DigitalEyedropper.init(); 并用我的滴管创建另一个JFrame。 它打开并运行,但我似乎无法关闭它。默认的关闭按钮不起作用。它似乎不侦听任何JComponents。我试图添加一个JButton来关闭窗口,但失败了 有

我是新来的,我有个问题。
几个月前,我制作了一个简单的彩色滴管,可以从屏幕上的任何位置采集颜色。
现在我正在制作一个颜色实用程序,它有很多功能,比如平均颜色生成和混合颜色。无论如何,我认为添加这个滴管会很酷,所以我的JFrame中有一个JButton调用

DigitalEyedropper.init();
并用我的滴管创建另一个JFrame。
它打开并运行,但我似乎无法关闭它。默认的关闭按钮不起作用。它似乎不侦听任何JComponents。我试图添加一个JButton来关闭窗口,但失败了

有人能帮我吗?

public static JFrame window;
private static boolean cancel;

public void startProcess(){
    Thread t = new Thread(this);
    t.start();
}

public DigitalEyedropper(){
    window = new JFrame();
    window.setTitle("Color Utilty");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setSize(640,360);
    window.setVisible(true);
    window.setLocationRelativeTo(null);
}

public static void init() throws InterruptedException, AWTException{
    SwingUtilities.invokeLater(new DigitalEyedropper());
}
@Override
public void run() {
    do{
        PointerInfo a = MouseInfo.getPointerInfo();
        Point b = a.getLocation();
        int x = (int) b.getX();
        int y = (int) b.getY();
        try {
            Robot picker = new Robot();
            Color color = picker.getPixelColor(x, y);
            window.setBackground(color);
        }
        catch (AWTException e) {
        }
        if(cancel){
            System.out.println("breaking...");
            //How to close the JFrame?
        } while(/*What to do?*/)
    }
}   

1) 不要阻止EDT(事件调度线程)-发生这种情况时,GUI将“冻结”。不要调用
Thread.sleep(n)
为重复任务执行Swing
计时器,或为长时间运行的任务执行
SwingWorker
。有关更多详细信息,请参阅。2) 请参阅3)为了更快地获得更好的帮助,请发一封邮件。@andrew thompson感谢您的帮助,先生!我对Java很陌生,我正试图和一个“SwingWorker”一起工作。你能给我一些做这件事的指导方针吗?