注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> 核心技术 >> SwingAwtApplet >> Java正文

Swing之JTable运用线程一个测试

文章来源:blogjava.net 作者:佚名 更新时间:2008-8-23 14:35:53 【 】 【加入收藏

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();
 }
}

  • 上一篇Java:

  • 下一篇Java:
  • 最 新 热 门
     Flash、HTML、Ajax 谁将赢得Web应用之战
     超越XML和JSON:YAML,Java开发人员的新选择
     优秀Java程序员必须了解的GC工作原理
     Java 6 RowSet 使用完全剖析
     pureQuery带注释的方法风格简介
     面向Java开发人员的Scala指南: 实现继承
     Java 6中的性能优化
     Java实现Windows的dir命令
     Java标准类库提供的容器总结
     在Tomcat上开发Web应用如何保证兼容性
    最 新 推 荐
     GridBagLayout布局管理器—实现左右选择框
     Swing实现Windows任务窗口
     Swing之JTable运用线程一个测试
     Swing通用数据验证模块
     NetBeans开发Applet方法实例学习
     解析Swing中的键盘事件处理
     Java Swing 中三种事件处理方法的比较
     Swing增加透明窗体及不规则窗体
     Applet调用JavaScript函数
     Swing 中设置模态窗体和启动位置
    相 关 文 章

    Java实现Windows的dir命令
    MyEclipse中Spring工程使用@Resource注释的…
    eclipse.ini内存设置各参数含义
    Spring自动代理机制
    Spring Framework 的理解
    Spring AOP的一些概念
    Spring的切入点(三 动态Pointcut)
    Spring的切入点(二 静态Pointcut的例子)
    Spring的切入点(一 静态Pointcut)
    AOP及其在Spring中的应用

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用