为什么这个while循环会阻止paint方法正常工作?

时间:2015-11-03 20:49:51

标签: java netbeans while-loop jframe jpanel

这是我的代码:

package javaapplication2;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class JavaApplication2 extends JPanel {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Simple Sketching Program");
        frame.getContentPane().add(new JavaApplication2());

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);
        frame.setVisible(true);
    }

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, getSize().width, getSize().height);

        while(true) {
            delay(1000);
        }
    }
}

我仍然想要抓住这里的东西。 现在如果while(true)循环被注释掉,它工作正常,屏幕被黑色覆盖。 我甚至把它放在repaint()中并从paint中调用它,这也是同样的事情。我敢肯定我距离制作这么好。如果我做错了,你能告诉我吗?我一直在寻找各种工作,并找不到任何适用的东西。谢谢。

1 个答案:

答案 0 :(得分:2)

因为绘画发生在Event Dispatch Thread中,而你用明显的无限循环阻挡了它。这样可以防止发生任何进一步的绘画,处理事件以及EDT内发生的任何其他事情。

这就是为什么你永远不会在EDT上执行长时间运行的操作,而是使用SwingWorker或其他机制。