我正在努力让多线程应用程序与 EMF 模型一起使用。问题是,由于某种原因,以下代码在 next() 处抛出未处理的 NullPointerException:
TreeIterator<EObject> i = myEObject.eAllContents();
if (i.hasNext()) {
EObject o = i.next();
// Process o...
}
此问题仅在同时访问 EMF 资源的多线程应用程序中出现。我通过 wait()/notify() 添加了线程同步保护函数,但仍然遇到相同的错误。
大家有遇到过类似的问题吗?您知道哪些 EMF 函数是线程安全的,哪些是非线程安全的吗?
预先感谢您的帮助!
最佳答案
我找到了错误:使用 eAllContents() 进行迭代时,EMF 不检查并发修改;然而,在这种情况下,我有一个。这一事实导致了迭代器本身的修改,进而以 NullPointerException 结束。
因此,似乎eAllContents()函数不应该在多线程应用程序中使用。相反,应该通过每个 EClass 的实际属性来访问模型元素以避免此问题。
关于java - 在 Eclipse EMF 中使用抽象迭代器时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27275894/