当前位置:首页 > 全部子站 > IT > 思科认证

Swing之JTable运用线程一个测试

来源:长理培训发布时间:2017-12-19 16:05:14

 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 value = new Vector();

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

责编:罗莉

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部