java - 在 Eclipse EMF 中使用抽象迭代器时出现空指针异常

标签 java eclipse multithreading eclipse-emf

我正在努力让多线程应用程序与 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/

相关文章:

java - ScheduledExecutorService 异常处理

java - 从java对象实例生成XSD的框架

Java逐行读取文件并替换第n列

eclipse - 增量发布到 JBoss 不会更新 JSP 文件,只会更新 Java 文件。

eclipse - 如何在 Neo4j 中迁移/移动/复制/移动数据

Eclipse/GTK+ 3 使用填充浪费空间

java - 执行端点调用时关闭线程消失

java - 如何确保只创建具有特定状态的表行?

java - 没有本地数据库的 TDD?

java - 如何读取csv文件中的指定行