在hasNext()调用时循环冻结

时间:2016-01-09 14:42:57

标签: java debugging while-loop iteration jena

我在调用基本hasNext()方法时遇到了一些问题。

我不明白为什么会这样。执行中有一段时间,程序将在3次迭代中完成此任务

StmtIterator statementIt = m.listStatements(null, p, obj);
Statement stamt = null;
List<Resource> lres = new ArrayList<Resource>();
while (statementIt.hasNext())
{
    stamt = (Statement)statementIt.next();
    System.out.println("Debugging: " + stamt.getSubject().toString());
    if(!stamt.getSubject().isURIResource())
    {
        break;
    }
    if(!lres.contains((Resource)stamt.getSubject()))
        lres.add((Resource)stamt.getSubject());
    System.out.println("debugging: there will be another iteration: " + statementIt.hasNext());
}

它确实经历了3次,但在尝试执行hasNext()操作时它会挂起。我试图通过调试视图观察程序的配置文件(我使用Eclipse开发Java),虽然我不是这个调试工具的主人,但我找不到任何相关的东西来查明异常的起源。 / p>

我在这里不知所措,请发送帮助D:

1 个答案:

答案 0 :(得分:0)

感谢@ user205512和@JoshuaTaylor,我找到了问题。

我正在使用一个推理程序,它会挂起程序寻找更多节点但从未真正处理它(默认的Jena包为Reasoners实现了一个接口,但没有工作推理器。)

解决方案:要么放弃使用推理器(在处理本体时不太重要),要么得到合适的推理器并使其工作(我目前正试图驯服Pellet推理器:P)