java仅在整个UI启动时运行线程
我只想在整个UI正常运行时运行thrad,即所有组件的paint()
都已完成。
我尝试使用SwingUtilities.invokeLater()
,但线程仍然在整个UI启动之前或所有组件的paint()
未完成时运行
有可能吗
谢谢
你可以在下面搜索框中键入要查询的问题!
我只想在整个UI正常运行时运行thrad,即所有组件的paint()
都已完成。
我尝试使用SwingUtilities.invokeLater()
,但线程仍然在整个UI启动之前或所有组件的paint()
未完成时运行
有可能吗
谢谢
# 1 楼答案
好的。现在我明白你的问题了。方法paint()不是执行invokeLater()调用的合适位置
方法paint()可能会被调用多次。实际上,每当屏幕的一部分需要重新绘制时,就会调用它
您可能希望在侦听器的代码中或在对话框关闭时添加以后的调用,但决不能从方法paint()调用
此外,方法paint()本身总是从事件分派线程调用的,所以如果您想确保它是从EDT调用的,那么在那里调用invokeLater是非常冗余的
如果您向我们展示您为启动应用程序而编写的方法,我们可能会为您指出代码调用的确切位置
# 2 楼答案
无法知道整个UI何时启动,这主要是因为您已经编写了大量组件,这些组件可能需要花费自己的宝贵时间才能加载
有SwingUtilities.invokeAndWait。但时机将是一个问题。从某种意义上说,一旦确定调用了设置UI的初始化代码,就必须调用它
一种方法可能是设置一个复选标记。假设您有5个主要组件,每个组件一旦加载就会设置它们自己的checkflag(或者您可以有一个保存该标志的Say commons类)。线程将继续等待所有ckeckflags,然后继续
你也可以使用倒计时锁,但我不推荐。保持简单