2013-02-12 37 views
1

只有当整个用户界面正常运行时,我才想运行一个thrad。所有组件的paint()已完成。 我尝试使用SwingUtilities.invokeLater(),但仍然在整个UI启动之前或所有组件的paint()未完成时运行该线程。只有当整个用户界面启动时才运行线程

是否有可能

谢谢。

+0

是的。有可能的。这取决于你何时调用invokeLater()。请分享您的代码,以便我们看到。 – ATrubka 2013-02-12 06:17:53

回答

0

没有办法知道当整个UI到了,主要是因为你写了,可能拿自己的甜蜜时间来加载自己的许多组件。

SwingUtilities.invokeAndWait。但时机将成为一个问题。从某种意义上说,一旦确定已经调用设置UI的初始化代码,您就必须调用它。

一种方法可能会有一个checkflag。假设你有5个主要组件,每个组件都有自己的checkflag(或者你可以说拥有flag的commons类)。你的线程将继续等待所有的ckeckflags,然后继续。

你也可以使用CountdownLatch,但我不会推荐它。把事情简单化。

0

好的。现在我明白你的问题是什么。方法paint()不适合做invokeLater()调用。

方法paint()可能会被调用多次。实际上,只要屏幕的一部分需要重新绘制,就会调用它。

您可能需要添加你以后的调用在听众的代码或在对话框关闭,但不应该从方法涂料称为()。

此外,方法paint()方法本身总是从事件指派线程调用​​,这样做的invokeLater有相当多的冗余,如果你想确保它是从EDT调用。

如果你告诉我们的方法,你写来启动应用程序,我们也许能够给你指出你需要什么地方做你的代码调用。