一个很简单的例子:
{
System.out.println("draw 前...");
repaint();
System.out.println("draw 后...");
}
然后重写paint方法在paint方法中加入一句话
{
super.paint(g);
System.out.print("drawing...");
}然后点击按钮控制台出现
draw 前...
draw 后...
drawing...证明repaint肯定是延时了.
1.它如何延时的?
2.如何才能让程序正确的走这个流程呢?
{
System.out.println("draw 前...");
repaint();
System.out.println("draw 后...");
}
然后重写paint方法在paint方法中加入一句话
{
super.paint(g);
System.out.print("drawing...");
}然后点击按钮控制台出现
draw 前...
draw 后...
drawing...证明repaint肯定是延时了.
1.它如何延时的?
2.如何才能让程序正确的走这个流程呢?
而且估计这又是一个线程再执行吧!
在你的
{
System.out.println("draw 前...");
repaint();
Thread.sleep(50);
System.out.println("draw 后...");
}
勉强可以实现,不过估计程序也要变得乱七八糟的
System.out.println("before drawing...");
self.repaint();
SwingUtilities.invokeLater(new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
System.out.println("after drawing...");
}
});这样也许可以,虽然也许需要线程,但是消除了flag
你试一下
这样确实可以,能否解释一下?为什么?看了JDK但解释还是不太清楚.
paint()是被放到事件派发线程里,用invokeLater貌似也是放到事件派发线程里的,
这样的话是不是就可以保证顺序的执行?很可能解释的不对,最好能有高人来解释下