2011-11-27 5 views
2

우리는 마우스로 그래프/네트워크를 그릴 수있는 정글이있는 작은 그래프 편집기를 개발했습니다. 우리는 우리가 그리는 패널로 VisualizationViewer를 사용합니다. VisualizationViewer는 포함하고있는 GraphLayout을 통해 표시해야하는 그래프를 보유합니다.JUNG, 시각화 뷰어에서 그래프 참조 변경

public void saveGraph(){ 
    Graph<V, E> g = visualizationviewer.getGraphLayout.getGraph(); 
    // save g into text file 
} 

내가 지금 어떤 알고리즘을 사용하여 나에게 새로운 그래프 개체를 생성하는 클래스를 작성했습니다 :

public Graph<V, E> generateGraph(){ 
    Graph<V, E> g = new DirectedSparseGraph<V, E>(); 
    // do some algorithms on g 
    return g 
} 

내가 지금하려는 경우를 우리는 또한 텍스트 파일로 그래프를 저장하는 저장 기능을 가지고 생성 된 그래프를 표시하려면

... 
visualisationviewer.getGraphLayout.setGraph(generateGraph()); 
... 

새 그래프가 완벽하게 표시되고 더 이상 그래프를 그릴 수 있습니다.

하지만 저장 기능 (및 VisualizationViewer의 기본 Graph 객체를 사용하려는 다른 모든 기능)이 이제는 제대로 작동하지 않습니다. 하나의 노드 만 인식되거나 노드가 없습니다 (결과적으로 NullPointerException이 발생 함). 기본 그래프 데이터 구조를 검색 할 때마다

visualizationviewer.getGraphLayout.getGraph(); 

여기에 뭔가가 있습니까? 또는 프레임 워크 내에 알려진 버그가 수정되지 않았습니까? 프로그래밍 방식으로 기본 객체를 검색하는 동안 광학 부분이 완벽하게 작동하는 것은 이상한 것처럼 보입니다.

+0

를 통해 직접하지 PDEEdgesNodes을 추가 명심 도움 생각하지만 JUNG2는 제공하지 않는다 내 프로젝트에서 사용하지 않는 그래프/레이아웃을 저장 /로드하는 영구 메커니즘 ...'edu.uci.ics.jung.samp의 예제 코드를 확인해보십시오. les.PersistentLayoutDemo.java'를 선택하십시오. – ecle

+0

검색은 편집기의 다른 많은 부분에서도 사용됩니다. 예를 들어 절약 기능을 예제로 사용했습니다. 문제는 항상 동일합니다. – user283494

답변

1

문제는 처음에 arrayList에 추가하고 그 목록에서 그래프에 추가하여 두 단계로 정점을 추가했다는 것입니다. 이 같은 노드를 추가해야 할 프로그램이 널 포인터 예외를 방지하기 위해 동적으로 작동 가입일 :

Node node;   
g.addVertex(node = nodefactory.create()); 
nodes.add(node); 

여전히 arrayList(nodes)를 사용하지만 오류를 방지 할 수있어이 방법!

번째 오류 그러므로 당신이 노드의 이름을 비교하고 바로

I를 얻기 위해 이전 노드의 위치를 ​​가지고 가야 시각화 뷰어가 새로운 그래프에서 노드를 인식하지 않는다는 것입니다 그 모든 ..
그냥 내가 완전히 단지 내가 가장 필요한 사용 JUNG2을 탐구하지 않는 ArrayList ;-)

관련 문제