import java.awt.*;
import javax.swing.*;
import java.awt.event.*;public class ListTest extends JFrame {
    DefaultListModel model = new DefaultListModel();
    JList list = new JList(model);
    JButton btn = new JButton("Test");    public ListTest() {
        getContentPane().add(new JScrollPane(list),BorderLayout.CENTER);
        getContentPane().add(btn,BorderLayout.SOUTH);
        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("======= Remove ====");
                model.removeAllElements();
                System.out.println("======= Removed ====");
                for (int i=0;i<3000;i++){
                    model.addElement("String -- "+i);
                }
                System.out.println("======== Added ========");
            }
        });
    }
    public static void main(String[] args) {
        ListTest listtest = new ListTest();
        listtest.pack();
        listtest.setVisible(true);
    }
}
就上面这点代码,就是在一个JList里面放了3000个Item, 不停的点按钮刷新,没发现什么问题吧,
但是要是你选中第一个Item,再点按钮试试呢,这时候界面就会出现一个长时间的跟死了一样的过程, 而且我发现并没有立即打印我的第一句调试语句,接着看后面两句调试语句,Add过程也耗时不少,
这是什么原因呢??而且只有当第一个Item被选中的时候点击按钮会出现这种现象,选其他的或者不选直接刷新,都没有发现这个问题,
我折腾了一晚上没想明白是什么原因。
大家帮忙看看,是哪边的问题呢??难道是JList的BUG??

解决方案 »

  1.   

    我的机器:奔4,1G内存
    环境:Jbuilder9,JDK1.4.2
    测试结果:完全正常,没发现楼主说的情况
      

  2.   

    我考 LS的 你的性欲着么搞得这么低..貌似看破红尘拉 哈哈
    运行正常,可能是JB问题
      

  3.   

    ------------------------------------------------------
    我考 LS的 你的性欲着么搞得这么低..貌似看破红尘拉 哈哈
    ------------------------------------------------------
    LS和LS的LS性欲加起来刚好100,貌似
      

  4.   

    btn.addActionListener(new ActionListener()
     {
      public void actionPerformed(ActionEvent e)
      {
      new Thread()
          {
             public void run()
             {
                System.out.println("======= Remove ====");
                model.removeAllElements();
                System.out.println("======= Removed ====");
                for (int i=0;i<3000;i++)
                model.addElement("String -- "+i);
                System.out.println("======== Added ========");
              }
           }.start();
       }
       
      });
    放在一个线程里试试
      

  5.   

    谢谢楼上各位, 今天再测
    JBuilder 2006, java version 1.5.0_03-b07 , 有我说的问题
    换成 java version 1.4.2_03-b02 就没出现这种情况了,不知道啥原因。