Re: [問題] swing上的問題
※ 引述《del680202 (DAINA)》之銘言:
: 今天我寫了一隻程式
: 希望自動去分析一串文字,然後把找到的文字放到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)
: ...
根據放大絕直接偷看 OpenJDK 原始碼的結果
以單緒而言,不可能會拋出 java.lang.ArrayIndexOutOfBoundsException
唯一的可能是發生競速條件 (race condition)
也就是你的多緒沒有做同步化,使得多個執行緒同時運作於 updateLayoutState()
而 cellHeights 成員變數 (protected int[]) 在不同的執行緒中做兩次以上陣列初始化
cellHeights = new int[list.getModel().getSize()];
造成下面的陣列存取產生陣列索引值超出邊界例外
cellHeights[index] = cellSize.height;
由你附上的程式碼無法診斷真正出錯的原因,所以以上猜測仍不一定正確。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.247.13
推
03/23 17:43, , 1F
03/23 17:43, 1F
→
03/23 19:12, , 2F
03/23 19:12, 2F
推
03/23 21:06, , 3F
03/23 21:06, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):