我正在構建一個Java應用程序,並且實現了自定義偵聽器和事件。現在的問題是有很多事件和監聽器,而應用程序GUI線程在監聽器處理事件時被阻塞。這可以使用事件調度線程來解決嗎?如果是這樣如何?事件派發線程上的java自定義事件
聽衆代碼:
public class ProjectChangeObserver
{
private List<ProjectChangeListener> listeners = new ArrayList<ProjectChangeListener>();
public void addProjectChangeListener(ProjectChangeListener l)
{
listeners.add(l);
}
public void removeProjectChangeListener(ProjectChangeListener l)
{
listeners.remove(l);
}
public void removeAllProjectChangeListeners()
{
listeners.clear();
}
public void fireProjectChange(ProjectChangeEvent e)
{
if(listeners.size() > 0)
{
ArrayList<ProjectChangeListener> safeCopy = new ArrayList<ProjectChangeListener>(listeners);
for (ProjectChangeListener cl : safeCopy) {
cl.onProjectChange(e);
}
}
}
}
更精確的實現一個粘貼操作,它只是將一些元素複製到一個矢量(響應事件),但問題是如果有很多元素會阻塞GUI線程。所以,如果我明白你的答案,我應該產生一個新的線程,並在那裏做粘貼操作? – blejzz 2012-07-30 11:15:36
嗯,這是一個棘手的問題,因爲用戶正在生成一個事件,並且您的視圖正在響應它。如果您在單獨的線程中實施處理,然後觸發輕量級事件(視圖可以快速處理),那麼您的用戶將被迫遇到短暫的延遲。由於我對你的項目的理解有限,我實際上建議你看看加快視圖的處理代碼,而不會陷入線程的困擾。 – fommil 2012-07-30 11:59:28