【发布时间】:2012-11-14 21:25:44
【问题描述】:
当我在我的代码中使用多线程时,我得到了以下惊人的异常,但是我不知道它发生在哪里。此外,此异常仅在某些时候发生。
线程“AWT-EventQueue-0”中的异常 java.util.NoSuchElementException:向量枚举在 java.util.Vector$1.nextElement(Vector.java:348) 在 javax.swing.plaf.basic.BasicTableHeaderUI.getPreferredSize(BasicTableHeaderUI.java: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);
}
【问题讨论】:
-
与您的问题无关,但我强烈建议使用执行器而不是直接使用线程。看看
java.concurrent.Executors -
另请注意,从 GUI 线程中访问 Swing GUI 是合法的 - 但这通常会引发更合格的异常。
-
Thread3.sleep(20);sleep 是一个静态方法,因此应该以静态方式访问它:Thread.sleep(20)!此外,请遵循 Java 命名约定:方法和变量以小写字母开头。 -
@user1547018 实际上,没有。违反单线程访问 Swing 的结果只能导致如前所述的不可预知和不可理解的错误。
-
见Concurrency in Swing。不允许在除 EDT 之外的其他线程上更改 Swing 组件。查看堆栈跟踪,您正在错误的线程上修改表数据
标签: java multithreading swing exception event-dispatch-thread