我有个问题。我必须等待从库调用的方法完成,然后才能继续执行代码。我怎样才能做到这一点?我的代码:

Random random = new Random();
int node1 = random.nextInt(graph.getNumberOfVertices() + 1);
int node2 = random.nextInt(graph.getNumberOfVertices() + 1);

MatrixWrappedPath path = graph.getShortestPath(node1, node2);

int pathLength = 0;
if (path != null) {
    pathLength = path.getLength();
}


我从库(http://grph.inria.fr/javadoc/index.html)获得的异常是:


线程“主”中的异常java.lang.IllegalStateException:无法计算距离,因为两个顶点未连接

在grph.algo.distance.DistanceMatrix.getDistance(DistanceMatrix.java:56)

在grph.MatrixWrappedPath.getLength(MatrixWrappedPath.java:47)


DistanceMatrix类运行一个BFS(org.dipergrafs.algo.bfs.BFSAlgorithm),该BFS是多线程(org.dipergrafs.algo.SingleSourceSearchAlgorithm,方法为“计算”):

public R[] compute(final Grph g, IntSet sources)
{
final R[] r = createArray(sources.getGreatest() + 1);

new MultiThreadProcessing(g.getVertices(), Grph.getNumberOfThreadsToCreate()) {

    @Override
    protected void run(int threadID, int source)
    {
    r[source] = compute(g, source);
    }

};

return r;
}


)并填充DistanceMatrix。因此,如果DistanceMatrix尚未完成,则getDistance(node1,node2)方法无法从DistanceMatrix获取值。
我读到有关CountDownLatchwait()notify()的信息,但是我不知道该怎么做。什么是解决此问题的好方法?

最佳答案

假设那里存在多线程问题,这是错误的。

错误消息非常清楚:

(...)cannot compute a distance because the two vertices are not connected


您要在图中选取2个随机节点,但这些节点未连接。这就是图书馆无法计算距离的原因。

您确定您不会忘记在图形中添加边吗? ;)

09-11 20:28