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

Why does this while loop prevent paint method from working correctly?

这是我的代码:

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 中调用它,这也是一样的。我敢肯定,我离做到这一点还差得很远。如果我做错了什么,你能告诉我吗?我一直在到处寻找让这个工作,但找不到任何适用的东西。谢谢。

因为绘画发生在 Event Dispatch Thread 中,而您用明显的无限循环阻止了它。这将阻止任何进一步的绘制、事件的处理以及 EDT.

中发生的任何其他事情。

这就是为什么您从不对 EDT 执行长 运行 操作,而是使用 SwingWorker 或其他机制。