package kanjingcai;

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的一个线程,能很好的解决这个问题
 * 供同样遇到这样问题的人参考。
 */
@SuppressWarnings("serial")
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();
 }
}

转载于:https://www.cnblogs.com/kanjingcai/archive/2009/04/25/1443252.html

测试JTable添加数据相关推荐

  1. java jtable 添加数据库_java-将jTable中的数据插入数据库

    我试图将一些JTable数据保存到数据库中:我的代码是这样的: public void save(){ String invSL = new Mixed_Calculation().invoice_S ...

  2. 如何为你的测试环境添加假数据

    如果你出去面试,无论你是干前端后端还是做算法数据的,必有一道开发性问题不厌其烦地在等着你: 你在工作中遇到过什么难题? 而我在开发过程中,并且长时间地都面对着两个难题: 如何给变量起名字 如何给测试环 ...

  3. listView无需适配器添加数据(写demo快速开发)entries属性的特殊用法

    先看下简单的布局代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  4. 9206 课堂笔记 综合演练 添加数据与非空验证

    操作的数据目标 主窗体的需求 mdi窗体 菜单栏,新建数据,查询数据 主窗体设置mdi窗体 设置菜单栏 点击新增数据,弹出新窗体 绘制界面 通过代码让这个窗体显示出来 添加一个mdi的效果 让新窗体作 ...

  5. Django项目:CMDB(服务器硬件资产自动采集系统)--11--07CMDB文件模式测试采集硬件数据...

    1 #settings.py 2 # --------01CMDB获取服务器基本信息-------- 3 import os 4 5 BASEDIR = os.path.dirname(os.path ...

  6. 如何为curl命令添加数据?

    本文翻译自:How to urlencode data for curl command? I am trying to write a bash script for testing that ta ...

  7. ThingsBoard CE添加数据导出excel功能

    此文具体代码在文末语雀链接,需额外付费 b站效果演示地址 https://www.bilibili.com/video/BV1dK4y1P7hX 目录 前言 CE版本实现演示 组件设置页面修改 添加「 ...

  8. csdn入门测试教程------mysql数据库命令大全以及常用命令 安装教程 基础知识 附【练习题】

    前言: mysql数据库是每一个测试小白入行必学的一个知识,学会这些命令呢也能让你在玩转数据库的时候给你提供很多的便利也是很不错的,最后希望各位小伙伴学有所成,心想事成咯, 废话不多说直接上正文. [ ...

  9. Person表并添加数据 实例01

    成功创建Person 表 -- 测试 Person表   create table Persons  (   Id_P int, --Id_P 列的数据类型是 int,包含整数.其余 4 列的数据类型 ...

最新文章

  1. android添加常驻图标到状态栏
  2. NOJI 148 fibonacci数列(二) 矩阵乘法二分幂
  3. Delphi中JSon SuperObject 使用:数据集与JSON对象互转
  4. 如何创建SAP Cloud Platform Process Integration runtime服务
  5. linux系统下的“静态库和动态库”专题之二:库的创建和使用
  6. linux之/usr/local/bin和/usr/bin区别
  7. win2k 修改时间服务器,Win2K服务器端设置教程 第四节 WWW服务器的设置(上)
  8. 二叉树的前序、中序、后序遍历及互相求法
  9. 课节5:图神经网络算法(二)
  10. 和无用代码说再见!阿里文娱无损代码覆盖率统计方案
  11. eclipse 构建 jpa project 所需的用户库(vendor: EclipseLink)
  12. 组件化开发Android应用及SDK
  13. BZOJ 4802 欧拉函数(Pollard_Rho)
  14. sql2000 数据库置疑解决
  15. 如何使用 FFMpeg 在 Node.js 中将音频从 Wav 转换为 MP3
  16. 计算机网络之TCP中11种状态
  17. vue报错“NavigationDuplicat: Avoided redundant navigation to current location”解决方法
  18. linux audit 源码分析,audit初探
  19. 前端常用的一些插件、UI框架、js库,样式库以及官方文档。
  20. 微信jsapi支付结果回调错误Tag mismatch

热门文章

  1. pom.xml中的artifactId是什么意思?
  2. linux终端配备时钟oh-my-zsh主题
  3. 关于AutoML的一些笔记
  4. 特征名类似情况下的列表的快速书写
  5. debconf: DbDriver config: /var/cache/debconf/config.dat is locked by another process
  6. Ubuntu16.04(64位)下面使用Doxygen+Graphviz分析python代码
  7. java oracle 视图不存在_Weblogic 10.3,JDBC,Oracle,SQL - 表或视图不存在
  8. 入门Demo---SpringMVC学习笔记(二)
  9. MZOJ 1134: 二叉苹果树
  10. 黑客开始利用云计算暴力破解密码