这是我的代码:
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
或其他机制。