<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-50  評論-55  文章-8  trackbacks-0

    import javax.swing.*;
    import javax.swing.table.DefaultTableModel;
    import com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel;
    import java.awt.*;
    import java.util.Vector;
    /**
    ?* 測試JTable添加數(shù)據(jù),刪除數(shù)據(jù)頻繁操作,JTable出現(xiàn)數(shù)組越界的處理
    ?* 在工作中如果遇到頻繁的操作Jtable的數(shù)據(jù),特別是速率很快的情況下,經(jīng)常會遇到
    ?* Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException
    ?* 這樣的數(shù)組越界的異常,這里引入Swing的一個(gè)線程,能很好的解決這個(gè)問題
    ?* 供同樣遇到這樣問題的人參考。
    ?* @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("刪除的行數(shù)不能超過model的總行數(shù)!");
    ??} 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);//這個(gè)方法不會出現(xiàn)越界
    ?????addValueWithoutThread(value);//這個(gè)方法會出現(xiàn)越界,差別就在于加入一個(gè)線程
    ?????try {
    ??????sleep(10);
    ?????} catch (InterruptedException e) {
    ??????// TODO Auto-generated catch block
    ??????e.printStackTrace();
    ?????}
    ????}
    ???}
    ??};
    ??thread.start();
    ?}
    ??? /**
    ???? * 將添加記錄和刪除記錄在一個(gè)線程里走,不會出現(xiàn)頁面刷新的時(shí)候,數(shù)組越界的問題
    ???? * @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();
    ?}
    ?/**
    ? * 這樣一邊添加記錄,一邊刪除記錄,會出現(xiàn)數(shù)組越界的情況
    ? * @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();
    ?}
    }

    posted on 2008-07-30 11:48 蔣家狂潮 閱讀(1782) 評論(3)  編輯  收藏 所屬分類: Swing

    評論:
    # re: Swing之JTable運(yùn)用線程一個(gè)測試[未登錄] 2008-07-30 22:37 | gavin
    這個(gè)是什么原因呢??  回復(fù)  更多評論
      
    # re: Swing之JTable運(yùn)用線程一個(gè)測試[未登錄] 2008-08-01 16:35 | wolfsquare
    關(guān)鍵在SwingUtilities.invokeLater(runnable);上,和線程沒關(guān)系  回復(fù)  更多評論
      
    # re: Swing之JTable運(yùn)用線程一個(gè)測試 2008-08-04 15:51 | Qil.Wong
    嗯,wolfsquare說的對,SwingUtilities.invokeLater(runnable)將runnable操作放在Swing的EDT線程上,會挨個(gè)兒執(zhí)行,不會同時(shí)執(zhí)行,就不會產(chǎn)生溢出。這個(gè)和SwingWorker的publish很類似。  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲三级视频在线观看| a级毛片免费高清毛片视频| 亚洲色图在线观看| 免费A级毛片无码久久版| 4399好看日本在线电影免费| 精品无码国产污污污免费网站国产 | 亚洲综合精品香蕉久久网| 成人毛片免费观看视频在线| 无码一区二区三区免费| 一级日本高清视频免费观看 | 国产精品99久久免费观看| 色多多A级毛片免费看| 亚洲国产aⅴ成人精品无吗| 亚洲春色另类小说| 亚洲AV无码专区电影在线观看 | 国产精品亚洲一区二区三区久久 | 午夜免费1000部| 中文字幕视频免费| 日本免费在线观看| 两个人看的www高清免费视频 | 亚洲Av无码乱码在线znlu| 午夜一级毛片免费视频| 毛片a级毛片免费观看免下载| 亚洲免费二区三区| 免费福利在线播放| 国产成人免费高清激情明星| 免费不卡在线观看AV| 久久成人a毛片免费观看网站| 99视频在线观看免费| 中文字幕在线成人免费看| 三级毛片在线免费观看| 91免费福利视频| 国产成人无码区免费内射一片色欲 | 手机看黄av免费网址| 久久久久久久91精品免费观看| 波多野结衣在线免费视频 | 亚洲午夜精品国产电影在线观看| 亚洲欧洲尹人香蕉综合| 亚洲一区在线免费观看| 亚洲精品无码少妇30P| 日韩精品亚洲专区在线影视|