JFrame不会关闭

ank*_*ork 1 java swing jframe

目前,我正在研究Conway的生命游戏版本,以供我自己娱乐.到目前为止,一切都进展顺利,但就在我测试一些最终部件时,我发现了一个令人恼火的错误.代码的主体发生在while循环内,while循环由用户希望看到的游戏的"世代"数控制.当这个循环正在执行时,JFrame的红色X拒绝响应,我不知道为什么会这样.

我遇到此问题的区域:

public void run(int steps) throws InterruptedException{
    int a = 0;    
    do{
        step();
        myDisp.update(myDisp.getGraphics());
        Thread.sleep(delay);
        a++;
    }while(a < steps);
}    
Run Code Online (Sandbox Code Playgroud)

Bru*_*olo 6

我建议你把这种处理放在一个单独的线程中.只要将其保留在代码的主体中,只要循环运行,Swing组件就不会响应任何用户交互.

此页面中,您可以找到有关Swing应用程序中的异步操作的一些良好实践.我想强调其中一个主题:

规则#2:不要在事件线程上运行耗时的操作.

我将继续重复这一点:Swing对所有GUI事件使用单个线程.如果您的事件处理程序正在通过网络上传一个多兆字节的文件,那么这些事件将被延迟,直到您完成为止.这个规则涉及一个平衡行为:某些操作(例如获取文件的大小)非常快,以至于它们不会中断用户.但是,这不是一个骑士的理由,因为有一天你的用户将获得驻留在具有间歇性网络连接的文件服务器上的文件的大小.

此其他页面还显示了如何在Swing应用程序中处理长时间运行的任务的示例.您可能还想查看SwingWorker类.