我想在整个UI正常运行时运行thrad,即。所有组件的paint()
都已完成。
我尝试使用SwingUtilities.invokeLater()
,但仍然在整个UI启动或所有组件的paint()
未完成之前运行该线程。
是否可能?
感谢。
答案 0 :(得分:0)
无法知道整个用户界面何时启动,主要是因为您编写了自己的众多组件,可能需要花费很多时间来加载。
有SwingUtilities.invokeAndWait。但时机将成为一个问题。从某种意义上说,一旦确定已经调用了设置UI的启动代码,就必须调用它。
一种方法是可能有一个检查标志。假设你有5个主要组件,每个组件一旦加载就设置了自己的checkflag(或者你可以说拥有标志的commons类)。你的线程将继续等待所有的ckeckflags,然后继续。
你也可以使用CountdownLatch,但我不推荐它。保持简单。
答案 1 :(得分:0)
行。现在我看到你的问题是什么。方法paint()不适合进行invokeLater()调用。
可以多次调用方法paint()。实际上,只要屏幕的一部分需要重新绘制,就会调用它。
您可能希望在侦听器的代码中或在关闭对话框中添加以后的调用,但不应该从方法paint()调用它。
此外,方法paint()本身总是从Event Dispatch Thread调用,所以如果你想确保从EDT调用它,那么调用invokeLater几乎是多余的。
如果您向我们展示了您为启动应用程序而编写的方法,我们可能会指出您需要在何处进行代码调用。