2011-11-27 73 views
2

我們開發了一個帶有jung的小圖形編輯器,您可以使用鼠標繪製圖形/網絡。我們使用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)。每次我們要檢索我們使用的底層Graph數據結構:

visualizationviewer.getGraphLayout.getGraph(); 

我在這裏缺少什麼?還是在框架內有一個尚未解決的已知錯誤?看起來很奇怪,光學部件工作正常,而以編程方式檢索底層對象不是。

+0

我不充分發掘JUNG2只能用我最需要的,但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)但避免錯誤!

第二個錯誤是,因此,你要比較的節點的名稱,並採取以得到它的權利

我從舊節點的位置可視化瀏覽器不從新圖形識別節點不要認爲這是有幫助的所有..
只要記住添加PDEEdgesNodes直接而不是通過ArrayList ;-)