[問題] swing上的問題

看板java作者 (DAINA)時間16年前 (2009/03/23 15:57), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/4 (看更多)
今天我寫了一隻程式 希望自動去分析一串文字,然後把找到的文字放到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)
文章代碼(AID): #19nq3C0T (java)
文章代碼(AID): #19nq3C0T (java)