熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Swing之JTable運用線程一個測試

2013-11-23 19:11:42  來源: Java核心技術 

  import javaxswing*;
import javaxswingtableDefaultTableModel;
import comsunjavaswingplafwindowsWindowsClassicLookAndFeel;
import javaawt*;
import javautilVector;
/**
 * 測試JTable添加數據刪除數據頻繁操作JTable出現數組越界的處理
 * 在工作中如果遇到頻繁的操作Jtable的數據特別是速率很快的情況下經常會遇到
 * Exception in thread AWTEventQueue javalangArrayIndexOutOfBoundsException
 * 這樣的數組越界的異常這裡引入Swing的一個線程能很好的解決這個問題
 * 供同樣遇到這樣問題的人參考
 * @author 蔣家狂潮
 * email:
 *
 */
public class ThreadTable extends JTable {
 private DefaultTableModel model;

  static String[] header = new String[] { id name sex age };

  public ThreadTable() {
  model = new DefaultTableModel(header );
  thissetModel(model);
 }

  public void deleteRows(int rowCount) throws Exception {
  if (rowCount >= modelgetColumnCount()) {
   throw new Exception(刪除的行數不能超過model的總行數!);
  } else {
   for (int i = rowCount ; i >= ; i) {
    modelremoveRow(i);
   }
  }
 }

  public void testInsertValue() {
  final Vector<String> value = new Vector<String>();
  valueadd();
  valueadd(simon);
  valueadd(boy);
  valueadd();

  Thread thread = new Thread() {
   public void run() {
    for (int i = ; i < ; i++) {
     //addValueWithThread(value);//這個方法不會出現越界
     addValueWithoutThread(value);//這個方法會出現越界差別就在於加入一個線程
     try {
      sleep();
     } catch (InterruptedException e) {
      // TODO Autogenerated catch block
      eprintStackTrace();
     }
    }
   }
  };
  threadstart();
 }
    /**
     * 將添加記錄和刪除記錄在一個線程裡走不會出現頁面刷新的時候數組越界的問題
     * @param value
     */
 public void addValueWithThread(final Vector value) {
  Thread thread = new Thread() {
   public void run() {
    Runnable runnable = new Runnable() {
     public void run() {
      modeladdRow(value);
      if (modelgetRowCount() > ) {
       try {
        deleteRows();
       } catch (Exception e) {
        // TODO Autogenerated catch block
        eprintStackTrace();
       }
      }
     }
    };
    SwingUtilitiesinvokeLater(runnable);
   }
  };
  threadstart();
 }
 /**
  * 這樣一邊添加記錄一邊刪除記錄會出現數組越界的情況
  * @param value
  */
 public void addValueWithoutThread(final Vector value) {
      modeladdRow(value);
      if (modelgetRowCount() > ) {
       try {
        deleteRows();
       } catch (Exception e) {
        // TODO Autogenerated catch block
        eprintStackTrace();
       }
      }
     
    
 }
 public static void main(String[] args) {
  try {
   UIManagersetLookAndFeel(new WindowsClassicLookAndFeel());
  } catch (UnsupportedLookAndFeelException e) {
   // TODO Autogenerated catch block
   eprintStackTrace();
  }

  JFrame f = new JFrame();
  fgetContentPane()setLayout(new BorderLayout());

  ThreadTable table = new ThreadTable();
  JScrollPane scroll = new JScrollPane(table);
  fgetContentPane()add(scroll BorderLayoutCENTER);

  fsetSize( );
  fsetLocation( );
  fsetVisible(true);

  tabletestInsertValue();
 }
}


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26420.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.