gpt4 book ai didi

java - 正确加载大型 Java Swing UI,而不卡住它

转载 作者:行者123 更新时间:2023-12-02 02:19:53 28 4
gpt4 key购买 nike

我正在开发一个大型 Swing 应用程序,其中包含许多在应用程序启动时加载的组件。加载组件、设置其属性并将其添加到面板的过程需要几秒钟。

应用程序 UI 在应用程序加载期间卡住。我想在加载整个 UI 时显示启动加载屏幕,但启动画面也会卡住。

如果我将 UI 构造移动到另一个线程,这将是 EDT 线程违规。

在不卡住 UI 的情况下加载此类 Swing 界面的正确方法是什么?

我已经看到了关于这个主题的现有答案,但它们涵盖了与 Swing 无关的外部任务阻塞 UI 的情况,但在这里,复杂 UI 本身的构造阻塞了 UI 刷新 (启动画面进度条)。

最佳答案

有两种方法可以解决这个问题。

  1. 您将 UI 初始化分成小块,并使用 SwingUtilities.invokeLater 调用每个 block 。每个 invokeLater 都会触发重绘,因此您的 GUI 可以刷新。这应该是首选方式。
  2. 当您在将应用程序拆分为独立的小块时遇到问题时,您可以“误用”Foxtrot lib为 UI 重画提供同步中断

    public static void sleepNonBlocking(long millis) {
    Worker.post(new Job() {

    @Override
    public Object run() {
    try {
    Thread.sleep(millis);
    } catch (Exception e) {
    // nothing
    }
    return null;
    }
    });
    }

    您需要在应用程序中的某些位置调用此方法来强制重新绘制。

关于java - 正确加载大型 Java Swing UI,而不卡住它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48662718/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com