1

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

有可能吗?

谢谢。

4

2 回答 2

0

无法知道整个 UI 何时启动,主要是因为您编写了自己的众多组件,这些组件可能需要自己的甜蜜时间才能加载。

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

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

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

于 2013-02-12T06:20:55.990 回答
0

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

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

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

此外,方法 paint() 本身总是从 Event Dispatch Thread 调用,因此如果要确保从 EDT 调用它,那么执行 invokeLater 就非常多余。

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

于 2013-02-12T06:21:10.510 回答