我有一个Swing应用程序来创建RPG字符。 它有一个嵌套JTabbedPane的体系结构,因此有一个HeroTabsPanel具有HeroPanels并且每个那些具有一些更多的标签等的统计资料,物品等在基于JTabbedPane的Swing应用程序中导致性能下降的原因是什么?
所以GUI由上部的选项卡式窗格的英雄,当前英雄标签的下部分页窗格和当选择标签时显示对应于每个标签的EditViewPanel。
从一开始就表现糟糕,但是当我添加上层的英雄标签(让多个英雄同时编辑)时,标签之间的切换变得更慢。 需要几分钟以在所有代码完成添加组件后显示新JFrame中的内容。这可能是布局?
我正在使用MigLayout绝对定位。其实,在我添加上面的标签之前,已经有一些“绝对链接值不稳定的循环依赖!”问题,但现在不知何故。
在stateChanged()我有什么达此:
editViewPanel.activateView(currentTab.getLinkedView());
而且在activateView():
removeAll();
currentView = heroView;
add(currentView, "pos 0 0");
currentView.refresh();
revalidate();
但就像我说的,所有的代码执行完毕在合理的时间内,我已经完成了我的分析,但是完成后,会有相当长的延迟,在第一次添加到新的JFrame时长达几分钟。
另一个问题是,当我需要更新下面的tabbedpane内的面板时,特别是StatsPanel由几个列中的每个参数添加的string-int元素组成时,我还有一个很大的延迟。它也取决于MigLayout,由于某种原因(我知道设计不好)也具有绝对定位。但是我已经改变了它,所以在初始化之后没有组件被移除/添加,只有setText()被使用,并且在代码完成执行后仍然有很大的延迟。
我打算使用SwingWorkers,但我想在开始解决问题之前更好地理解问题。我怀疑这很简单,但我对它造成的延迟有多大有点怀疑。我会很感激SwingWorkers的一些提示/例子。
我可以添加更多的代码,如果你有一些大概的问题可能隐藏的问题。
欢迎任何建议,谢谢!
在eclipse调试程序中,如何获取线程转储以及如何分析它?抱歉,找不到有用的东西。 就像我说过的,所有的代码都在运行,所以我没有在调试器中看到任何东西。这个线程似乎还没有做任何事情,但是GUI被冻结了吗? – 2014-10-20 08:01:56
如果UI被冻结,您可能会发生死锁或仍在运行。我不使用Eclipse,所以不知道如何获得线程转储。 – Robin 2014-10-20 13:37:55