为什么while循环会阻止绘制方法正常工作



这是我的代码:

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)循环被注释掉,它工作正常,屏幕被黑色覆盖。我甚至把它放在paint()中,并从paint中调用它,这也起到了同样的作用。我确信我离做到这一点还有很长的路要走。如果我做错了什么,你能告诉我吗?我一直在四处寻找,想让它发挥作用,但找不到任何适用的东西。非常感谢。

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

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

相关内容

  • 没有找到相关文章

最新更新