这是我的代码:
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中调用它,这也是同样的事情。我敢肯定我距离制作这么好。如果我做错了,你能告诉我吗?我一直在寻找各种工作,并找不到任何适用的东西。谢谢。
答案 0 :(得分:2)
因为绘画发生在Event Dispatch Thread
中,而你用明显的无限循环阻挡了它。这样可以防止发生任何进一步的绘画,处理事件以及EDT
内发生的任何其他事情。
这就是为什么你永远不会在EDT
上执行长时间运行的操作,而是使用SwingWorker
或其他机制。