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