发布于 2008-09-02 15:58:56
您是否正在尝试显示独立于灭绝的JDialog?为了正确地设置顺序,您可能需要将这些操作捆绑在一个runnable中,该runnable会立即传递给EDT。
例如:
SwingUtilities.invokeLater(new Runnable(){
public void run(){
doAnnimation();
showDialog();
}
}
最好是将JDialog子类化,这样您就可以将doAnnimation()逻辑添加到setVisible(..)或者在调用超类实现之前使用show()方法。
最后,我想您需要手动设置dalog的大小--我不记得Java是否会在对话框显示之前知道它的实际大小,所以如果您在显示对话框之前查询大小,可能会得到一些无用的信息。
发布于 2008-09-18 13:40:06
也许你已经看过JSE6.(Link to SwingWorker)中包含的SwingWorker项目,在我正在读的“肮脏的富客户端”一书中,他们经常使用这个工具。也许您可以在图书网站上的示例中找到提示:http://filthyrichclients.org/
发布于 2008-09-04 01:00:11
你也许能够接受@rcreswick的答案,并对其进行一点扩展,使其发挥作用。
void myShowDialog() {
new Thread(new Runnable() {public void run() {
SwingUtilities.invokeAndWait(new Runnable() { public void run() {
doAnimation();
} } );
// Delay to wait for the animation to finish (if needed)
Thread.sleep(500);
SwingUtilities.invokeAndWait(new Runnable() { public void run() {
showDialog();
} } );
} } ).start();
}
它非常难看,必须调用它来代替基本的showDialog()调用,但它应该可以工作。
https://stackoverflow.com/questions/39108
复制相似问题