我有一個(主要)單線程應用程序,它會更新一個擺動圖表組件(jfreechart)。暫停事件調度程序
因爲圖表的所有更新都是在事件派發線程上完成的,所以任務的隊列變得太大,並且圖表沒有及時更新,並且正在更新它的代碼。
有沒有辦法暫停每隔一段時間以便事件調度線程可以趕上?
我的第一個傾向將是通過SwingUtilities.invokeAndWait
排定一個虛擬任務......它可以這麼簡單嗎?
cheers,p。
我有一個(主要)單線程應用程序,它會更新一個擺動圖表組件(jfreechart)。暫停事件調度程序
因爲圖表的所有更新都是在事件派發線程上完成的,所以任務的隊列變得太大,並且圖表沒有及時更新,並且正在更新它的代碼。
有沒有辦法暫停每隔一段時間以便事件調度線程可以趕上?
我的第一個傾向將是通過SwingUtilities.invokeAndWait
排定一個虛擬任務......它可以這麼簡單嗎?
cheers,p。
虛擬任務可以工作,但也許你可以考慮在數據生成線程中跳過一些更新。
這取決於你在做什麼。您的目標是儘可能快地計算某些內容並沿途更新GUI,或者您是否嘗試創建一個展示某些數據分析的良好GUI?
如果是前者,那麼你真的不想阻止等待GUI更新 - 它只會減慢計算速度。在這種情況下,只需跳過一些更新並將它們合併成不太頻繁的更大更新。
如果是後者,那麼invokeAndWait
可能會訣竅。
我正在重新使用一些專爲較不密集的進程設計的代碼,其目標只是以高於實時速率的速度讀取實時信息時進行可視化。它不需要超快,但我希望過程和教育部門保持一致。所以看起來像invokeAndWait。我會看看是否有人想出更好的東西,或者我會在一天或2天內給你打個招呼。 – pstanton 2010-12-09 02:20:54
一種方法是解耦更新速率:異步更新數據模型並以較低的可調整速率更新視圖。此example使用javax.swing.Timer
來實現定期更新,但固定比率是一種選擇。在JFreeChart
的情況下,fireSeriesChanged()
方法DynamicTimeSeriesCollection
應該給你必要的控制權。
是的,似乎工作,任何人都有一個更整潔的方法? – pstanton 2010-12-09 02:08:06