2010-12-09 72 views
1

我有一個(主要)單線程應用程序,它會更新一個擺動圖表組件(jfreechart)。暫停事件調度程序

因爲圖表的所有更新都是在事件派發線程上完成的,所以任務的隊列變得太大,並且圖表沒有及時更新,並且正在更新它的代碼。

有沒有辦法暫停每隔一段時間以便事件調度線程可以趕上?

我的第一個傾向將是通過SwingUtilities.invokeAndWait排定一個虛擬任務......它可以這麼簡單嗎?

cheers,p。

+0

是的,似乎工作,任何人都有一個更整潔的方法? – pstanton 2010-12-09 02:08:06

回答

2

虛擬任務可以工作,但也許你可以考慮在數據生成線程中跳過一些更新。

這取決於你在做什麼。您的目標是儘可能快地計算某些內容並沿途更新GUI,或者您是否嘗試創建一個展示某些數據分析的良好GUI?

如果是前者,那麼你真的不想阻止等待GUI更新 - 它只會減慢計算速度。在這種情況下,只需跳過一些更新並將它們合併成不太頻繁的更大更新。

如果是後者,那麼invokeAndWait可能會訣竅。

+0

我正在重新使用一些專爲較不密集的進程設計的代碼,其目標只是以高於實時速率的速度讀取實時信息時進行可視化。它不需要超快,但我希望過程和教育部門保持一致。所以看起來像invokeAndWait。我會看看是否有人想出更好的東西,或者我會在一天或2天內給你打個招呼。 – pstanton 2010-12-09 02:20:54

1

一種方法是解耦更新速率:異步更新數據模型並以較低的可調整速率更新視圖。此example使用javax.swing.Timer來實現定期更新,但固定比率是一種選擇。在JFreeChart的情況下,fireSeriesChanged()方法DynamicTimeSeriesCollection應該給你必要的控制權。