[問題] swing上的問題
今天我寫了一隻程式
希望自動去分析一串文字,然後把找到的文字放到JList顯示出來
單執行緒跑的時候沒問題
但是多執行緒就會怪怪的
jButton1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
parser(jTextField1.getText());
}
});
如果我把parser用另外一個執行緒去跑
就會出現
Exception
in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 630
at javax.swing.plaf.basic.BasicListUI.updateLayoutState(Unknown Source)
at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(Unknown Source)
at javax.swing.plaf.basic.BasicListUI.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
...
像這樣的例外
ArrayIndexOutOfBoundsException
而且有時候JList新增的內容不會被顯示出來
但是我確定有東西新增進去 但是他就"偶爾"就會顯示不出新增東西
可是單執行緒時不會出現這樣的問題
然後我更新List的程式
public void run() {
while(true){
synchronized (_list) {
try {
while (_list.isEmpty()) {
_list.wait();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch bloc
e.printStackTrace();
}
_model.addElement(_list.remove(0));
//MyUtil.sleep(10);
}
}
------------------
我設定是只要_list有東西 就把他放到JList的DefaultComboxModel裡面
用多執行緒時就會出現上面題的例外
但是很神奇的,只要我讓更新JList的程式sleep一下
也就是註解起來那行
就又不會出現我上面出現的問題......
請問這原因是什麼?
我有想過是不是event dispatch thread的影響...
但是詳細我實在是不清楚
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.169.131
※ 編輯: del680202 來自: 140.117.169.131 (03/23 16:05)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 4 篇):