我有一個Java應用程序,很多線程正在快速寫入StyledTextBox。在某個時候,所有的線程都被終止。但是,TextBox繼續接收文本的一點可能是因爲派遣隊列有點備份。是否有可能以某種方式強制EDT被刷新,以便當線程終止時,TextBox的更新立即結束?需要刷新Java EDT(事件調度隊列)
謝謝你,吉姆
我有一個Java應用程序,很多線程正在快速寫入StyledTextBox。在某個時候,所有的線程都被終止。但是,TextBox繼續接收文本的一點可能是因爲派遣隊列有點備份。是否有可能以某種方式強制EDT被刷新,以便當線程終止時,TextBox的更新立即結束?需要刷新Java EDT(事件調度隊列)
謝謝你,吉姆
好的,我找到了解決方案。這個想法是安裝一個「驗證」監聽器,只要文本即將被添加到StyledText
就會被調用。所以當文本即將被添加(從備份的分派隊列中)時,代碼會查找一個標記來指示線程是否被終止。如果線程已被終止,則忽略文本更新。這允許控件停止更新,同時允許排除事件隊列。以下代碼片段解決了這個問題。
txtOutput
是StyledText
控制。
endingThreads
是線程終止時boolean
設置爲true
。
這似乎是處理SWT應用程序中問題的最簡單方法。
txtOutput.addVerifyListener(new VerifyListener() {
public void verifyText(VerifyEvent e)
{
if(!endingThreads)
{
e.doit = true;
}
else
{
e.doit = false;
}
}
});
使用隊列爲你改變文本應用,日程事件的是工作隊列爲空返回之前的EDT。這會導致「空」事件,一旦線程完成並且EDT上的另一個計劃事件開始運行。
謝謝你的回覆。如果無法直接刷新事件隊列,那麼我需要實現類似於您的建議的解決方案。 – Chimera 2012-02-08 01:04:38
+1'e.doit =!endingThreads'會相當嗎? – trashgod 2012-02-09 03:33:06
是的,你的線條是相當的,而且更簡潔。 – Chimera 2012-02-09 03:36:26