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”一起工作。你能给我一些做这件事的指导方针吗?