这是我的密码:
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()中,并从画图中调用它,这做了同样的事情。我肯定我还差几英里才能把这件事做好。如果我做错了什么,你能告诉我吗?我一直在到处寻找,想让它起作用,却找不到适用的东西。谢谢。
发布于 2015-11-03 20:51:43
因为绘画发生在Event Dispatch Thread中,你用明显的无限循环阻止它。这将防止任何进一步的绘制发生,事件被处理,以及发生在EDT内部的任何事情。
这就是为什么您从不在EDT上执行长时间运行的操作,而是使用SwingWorker或其他机制。
https://stackoverflow.com/questions/33508805
复制相似问题