gpt4 book ai didi

java - 是什么导致基于 JTabbedPane 的 Swing 应用程序性能下降?

转载 作者:行者123 更新时间:2023-11-30 06:16:59 25 4
gpt4 key购买 nike

我有一个用于创建 RPG 角色的 Swing 应用程序。它有一个嵌套的 JTabbedPane 架构,所以有一个 HeroTabsPanel,它有 HeroPanels,每个都有更多的标签,比如 Stats、Items 等。

因此 GUI 由上部英雄选项卡式 Pane 、当前英雄选项卡下部选项卡式 Pane 和一个 EditViewPanel 组成,该面板显示与每个选项卡对应的 EditingView选项卡被选中。

性能从一开始就很糟糕,但是当我添加上层英雄标签(同时编辑多个英雄)时,标签之间的切换变得更慢。在所有代码完成添加组件后,需要几分钟才能在新 JFrame 中显示某些内容。这可能是布局?

我正在使用具有绝对定位功能的 MigLayout。实际上,在我添加上层选项卡之前,存在一些“绝对链接值中的不稳定循环依赖!” 问题,但现在不知何故没有了。

stateChanged() 我有这样的东西:

editViewPanel.activateView(currentTab.getLinkedView());

activateView() 中:

removeAll();
currentView = heroView;
add(currentView, "pos 0 0");
currentView.refresh();
revalidate();

但是就像我说的,所有的代码执行都在合理的时间内完成,我已经完成了我的分析,但是在完成之后,有相当长的延迟,在第一次添加的情况下长达几分钟到一个新的 JFrame。

另一个问题是,当我需要更新下部选项卡 Pane 中的面板时,尤其是 StatsPanel,它由为几列中的每个参数添加的 string-int 元素组成,我又遇到了很大的延迟。它还取决于 MigLayout 并且出于某种原因(我知道糟糕的设计)也具有绝对定位。但是我已经改变了它,以便在初始化后没有组件被删除/添加,只使用 setText() 并且在代码执行完成后仍然有很大的延迟。

我打算使用 SwingWorkers,但我想在开始解决问题之前更好地理解问题。我怀疑这很简单,但我有点怀疑它造成的延迟有多大。我会很感激关于 SwingWorkers 的一些提示/示例。

如果您对问题可能隐藏的位置有大致的了解,我可以添加更多代码。

欢迎提出建议,谢谢!

最佳答案

我从未遇到过由于可见的 JComponent 数量而变慢的 Swing UI。我经常看到的是一个缓慢的 UI,因为 UI 线程被使用/滥用来执行与 UI 更新无关的各种工作。

在 Swing 中,只有一个线程可以用来更新 UI,并且同一线程负责绘制 UI(事件调度线程)。如果您通过例如阻止此线程在其上执行计算时,UI 将无法在计算运行时重新绘制或对用户输入使用react。这就是为什么您必须在工作线程上执行所有繁重的工作。这在 Concurrency in Swing 中有清楚的解释。教程。

不能 100% 确定您的情况就是这样,但听起来确实如此。如果您想确定,请在等待 UI 时进行线程转储,看看此时名为 AWT-EventQueue-0 的线程正在做什么。如果您的 UI 更新真的需要 5 分钟,您必须能够相当快地找到阻止 UI 的内容。

关于java - 是什么导致基于 JTabbedPane 的 Swing 应用程序性能下降?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26441804/

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