有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

有可能吗

谢谢


共 (2) 个答案

  1. # 1 楼答案

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

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

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

    此外,方法paint()本身总是从事件分派线程调用的,所以如果您想确保它是从EDT调用的,那么在那里调用invokeLater是非常冗余的

    如果您向我们展示您为启动应用程序而编写的方法,我们可能会为您指出代码调用的确切位置

  2. # 2 楼答案

    无法知道整个UI何时启动,这主要是因为您已经编写了大量组件,这些组件可能需要花费自己的宝贵时间才能加载

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

    一种方法可能是设置一个复选标记。假设您有5个主要组件,每个组件一旦加载就会设置它们自己的checkflag(或者您可以有一个保存该标志的Say commons类)。线程将继续等待所有ckeckflags,然后继续

    你也可以使用倒计时锁,但我不推荐。保持简单