快速业务通道

Swing之JTable运用线程一个测试 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

Swing之JTable运用线程一个测试

时间:2011-08-13 蒋家狂潮

import javax.swing.*; import javax.swing.table.DefaultTableModel; import com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel; import java.awt.*; import java.util.Vector; /** * 测试JTable添加数据,删除数据频繁操作,JTable出现数组越界的处理 * 在工作中如果遇到频繁的操作Jtable的数据,特别是速率很快的情况下,经常会遇到 * Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException * 这样的数组越界的异常,这里引入Swing的一个线程,能很好的解决这个问题 * 供同样遇到这样问题的人参考。 * @author蒋家狂潮 * email:simon1006@163.com * */ public class ThreadTable extends JTable { private DefaultTableModel model; static String[] header = new String[] { "id", "name", "sex", "age" }; public ThreadTable() {   model = new DefaultTableModel(header, 0);   this.setModel(model); } public void deleteRows(int rowCount) throws Exception {   if (rowCount >= model.getColumnCount()) {   throw new Exception("删除的行数不能超过model的总行数!");   } else {   for (int i = rowCount - 1; i >= 0; i--) {    model.removeRow(i);   }   } } public void testInsertValue() {   final Vector<String> value = new Vector<String>();   value.add("0");   value.add("simon");   value.add("boy");   value.add("21");   Thread thread = new Thread() {   public void run() {    for (int i = 0; i < 100000; i++) {    //addValueWithThread(value);//这个方法不会出现越界    addValueWithoutThread(value);//这个方法会出现越界,差别就在于加入一个线程    try {     sleep(10);    } catch (InterruptedException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }    }   }   };   thread.start(); }    /**    * 将添加记录和删除记录在一个线程里走,不会出现页面刷新的时候,数组越界的问题    * @param value    */ public void addValueWithThread(final Vector value) {   Thread thread = new Thread() {   public void run() {    Runnable runnable = new Runnable() {    public void run() {     model.addRow(value);     if (model.getRowCount() > 5) {     try {      deleteRows(2);     } catch (Exception e) {      // TODO Auto-generated catch block      e.printStackTrace();     }     }    }    };    SwingUtilities.invokeLater(runnable);   }   };   thread.start(); } /**   * 这样一边添加记录,一边删除记录,会出现数组越界的情况   * @param value   */ public void addValueWithoutThread(final Vector value) {     model.addRow(value);     if (model.getRowCount() > 5) {     try {      deleteRows(2);     } catch (Exception e) {      // TODO Auto-generated catch block      e.printStackTrace();     }     } } public static void main(String[] args) {   try {   UIManager.setLookAndFeel(new WindowsClassicLookAndFeel());   } catch (UnsupportedLookAndFeelException e) {   // TODO Auto-generated catch block   e.printStackTrace();   }   JFrame f = new JFrame();   f.getContentPane().setLayout(new BorderLayout());   ThreadTable table = new ThreadTable();   JScrollPane scroll = new JScrollPane(table);   f.getContentPane().add(scroll, BorderLayout.CENTER);   f.setSize(800, 600);   f.setLocation(250, 250);   f.setVisible(true);   table.testInsertValue(); } }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号