仅在整个UI启动时运行线程

时间:2013-02-12 06:13:44

标签: java multithreading invokelater

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

是否可能

感谢。

2 个答案:

答案 0 :(得分:0)

无法知道整个用户界面何时启动,主要是因为您编写了自己的众多组件,可能需要花费很多时间来加载。

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

一种方法是可能有一个检查标志。假设你有5个主要组件,每个组件一旦加载就设置了自己的checkflag(或者你可以说拥有标志的commons类)。你的线程将继续等待所有的ckeckflags,然后继续。

你也可以使用CountdownLatch,但我不推荐它。保持简单。

答案 1 :(得分:0)

行。现在我看到你的问题是什么。方法paint()不适合进行invokeLater()调用。

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

您可能希望在侦听器的代码中或在关闭对话框中添加以后的调用,但不应该从方法paint()调用它。

此外,方法paint()本身总是从Event Dispatch Thread调用,所以如果你想确保从EDT调用它,那么调用invokeLater几乎是多余的。

如果您向我们展示了您为启动应用程序而编写的方法,我们可能会指出您需要在何处进行代码调用。