java - 仅当整个 UI 启动时才运行线程

标签 java multithreading invokelater

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

可能吗?

谢谢。

最佳答案

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

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

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

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

关于java - 仅当整个 UI 启动时才运行线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14826564/

相关文章:

java - Maven 资源插件依赖

c++ - 联盟中的atomic <>作为性能黑客

java - java的线程是如何在内存中工作的

java - 如果 EDT 是一个单独的线程,为什么在这个例子中 invokeLater 等待主线程完成?

java - 处理继承时删除条件语句

java 泛型多态性

java - JAVA中无等待队列的实现

使用线程和信号量的代码

java - invokeLater 与使用 JTextArea 的 invokeAndWait

java - 无法在繁重的进程下更新 Swing 组件