0

当我在我的代码中使用多线程时,我得到了以下惊人的异常,但是我不知道它发生在哪里。此外,此异常仅有时会发生。

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

我在我的应用程序中使用以下代码进行多线程。

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

1 回答 1

0

您需要研究几件事:

  1. 如果您从函数更新 GUI(向 JTable 添加项目是异常所暗示的)Get****Data,您将遇到 EDT 问题(这就是AWT-EventQueue-0您在错误中看到的)。而是使用SwingUtils.InvokeLater()。或者,如果您需要它在 20 毫秒(或 20 毫秒间隔)后运行,请使用Swing Timer

  2. 你打电话threadname.start();,然后在下一行,打电话threadname.sleep(20);。根据APIThread.sleep导致当前运行的线程等待 - 在这种情况下是 EDT(不是线程名)。如果您希望线程名休眠,请将 sleep 放置在可运行对象中,如下所示:

    Thread Thread5 = new Thread() {
       public void run() {
            Thread.sleep();
            GetOrderData(mID, "OrderInfo_Parts");
        }
    };
    
于 2012-11-27T15:08:37.157 回答