我正在尝试创建一个用于演示图形和算法的工具。为此,我找到了 GraphStream 库。我已阅读其所有文档和教程,但我无法使这一件事发挥作用。我正在尝试将图形放入我的自定义 GUI(带有按钮的左侧菜单和右侧图形空间)中,并且我设法做到了这一点。现在,当我启用两个按钮时:生成 - 使用随机生成器创建图形,清除 - 清除图形,一切正常,但在清除后,当我按生成时,我收到以下错误:
Exception in thread "Thread-2" org.miv.pherd.IdAlreadyInUseException: a particle with the same identifier already exists (0)
我不明白为什么这是一个问题,因为在没有 gui 的简单测试程序中,我在 main 中编写了简单的代码来执行相同的操作并且它有效:
public class Test {
public static void main(String[] args){
Graph graph = new SingleGraph("test");
graph.display();
Generator generator = new BarabasiAlbertGenerator();
generator.addSink(graph);
generator.begin();
for (int i = 0; i < 100; i++) {
generator.nextEvents();
}
generator.end();
graph.clear();
generator = new BarabasiAlbertGenerator();
generator.addSink(graph);
generator.begin();
for (int i = 0; i < 100; i++) {
generator.nextEvents();
}
generator.end();
}
这段代码可以工作,但是当我在 GUI 中使用按钮执行它时,我会抛出上面提到的错误。我还检查了我的程序中正在运行多少个线程,其中似乎有 3 个。我希望我的问题很清楚并且有人可以帮助我。谢谢大家!
最佳答案
这是由 BarabasiAlbertGenerator
类中的已知错误引起的(请参阅相应的 Graphstream users thread )。
此错误已在库的 1.3.x 版本中修复,目前可在 http://graphstream-project.org/pub/1.x/nightly-build/last/ 作为夜间构建版本使用。
(将来,此修复应该成为 regular Graphstream downloads 的一部分)
关于java - GraphStream 线程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27557330/