首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java Swing中的线程获取异常

用Java Swing中的线程获取异常
EN

Stack Overflow用户
提问于 2012-11-27 09:33:19
回答 1查看 1K关注 0票数 0

当我在代码中使用多线程时,我得到了下面这个惊人的异常,但是,我不知道它发生在哪里。而且,这种异常有时只会发生。

线程“AWT 0”中的异常: java.util.Vector$1.nextElement(Vector.java:348) at javax.swing.plaf.basic.BasicTableHeaderUI.getPreferredSize(BasicTableHeaderUI.java:793) at javax.swing.JComponent.getPreferredSize(JComponent.java:1660) java.util.NoSuchElementException的向量枚举

在我的应用程序中,我使用下面的代码进行多线程处理。

代码语言:javascript
复制
       try {
        Thread Thread4 = new Thread() {
           public void run() {
                GetOrderData(mID, "OrderInfo_Orn");
            }
        };
        Thread4.start();
        Thread4.sleep(20);

        Thread Thread5 = new Thread() {
           public void run() {
                GetOrderData(mID, "OrderInfo_Parts");
            }
        };
        Thread5.start();
        Thread5.sleep(20);
        Thread queryThread = new Thread() {

            public void run() {
                GetMasterData(mID, rowId);
            }
        };
        queryThread.start();
        queryThread.sleep(20);
        Thread Thread2 = new Thread() {
            public void run() {
                GetDetailData(mID, "'RcvPrePolishGoods_Detail'");
            }
        };
        Thread2.start();
        Thread2.sleep(20);

        Thread Thread3 = new Thread() {
            public void run() {
                GetDetailData(mID, "'RcvPrePolishGoods_Parts'");
            }
        };
        Thread3.start();
        Thread3.sleep(20);
      } catch (InterruptedException ex) {
        Logger.getLogger(RcvPrePolishGoods.class.getName()).log(Level.SEVERE, null, ex);
    }
EN

回答 1

Stack Overflow用户

发布于 2012-11-27 15:08:37

有几件事你想研究:

  1. 如果您从JTable函数中更新GUI (将项添加到Get****Data函数中是异常的含义),您将遇到Get****Data问题(这就是您在错误中看到的AWT-EventQueue-0 )。相反,请使用SwingUtils.InvokeLater()。或者,如果您需要它在20 ms后运行(或每隔20 ms运行一次),请使用摆动定时器
  2. 您正在调用threadname.start();,然后在下一行调用threadname.sleep(20);。根据API接口Thread.sleep会导致当前正在运行的线程等待--在本例中是EDT (而不是线程名)。如果希望线程名休眠,请将睡眠放在可运行的文件中,如下所示: 线程Thread5 =新线程(){ public void (){ Thread.sleep();GetOrderData(mID,"OrderInfo_Parts");};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13581164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档