我有一個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