我想将面板涂成蓝色,然后等待五秒钟,然后再做其他事情 现在我有以下代码,我希望能够做到我想要的。这是:
JPanel somePanel = getSomePanel();
somePanel.setBackground(Color.BLUE);
Object lock = new Object();
synchronized (lock) {
try {
lock.wait(5000);
}
catch (InterruptedException exc) { }
}
// Do other stuff
但相反,它会等待五秒钟,然后将组件涂成蓝色。
答案 0 :(得分:4)
不要在GUI事件处理程序中等待 - 它会阻止消息的处理,例如。重绘请求。
等待锁定时没有GUI完成。
答案 1 :(得分:4)
不要在Swing事件线程上锁定同步代码,因为您所做的就是锁定Swing本身并冻结GUI。谷歌“Swin中的并发”的详细信息。我自己会为此使用Swing Timer。请注意,您的帖子使用的是multithreading标记,但实际上并没有在任何地方进行多线程处理。
答案 2 :(得分:3)
其他人是正确的,如果你在等待事件派遣线程,那么这个线程在此期间不会做任何绘画。
然而,有一个技巧可以帮助你而不需要开始一个新线程:在设置背景颜色后调用paintImmediately。
somePanel.paintImmediately(0, 0, somePanel.getWidth(), somePanel.getHeight());