2014-01-08 168 views
-4

在我的代碼中,我正在從數據庫構造一個圖形。 我的代碼的某些部分,以創建圖表(我沒有包括速記的SQL命令):線程「main」中的異常java.lang.NullPointerException

String node_label=null; 
    String node_type=null; 
    String edge_label=null; 
    String target; 
    String source; 
    String super_class=null; 
    String sub_class=null; 
    String table_trigger=null; 
    String trigger_name=null ; 
    String referenced_trigger=null; 
    String Sub_foreign_key=null; 

    for (int t = 0; t <=count_table-1 ; t++){ 
        . 
        . 
        . 
       Sub_foreign_key=null; 
       sub_class=null; 
       sql="… "; 
       ResultSet rs4 = stmt.executeQuery(sql); 
        while(rs4.next()){ 
        sub_class=rs4.getString(1); 
         } 
        rs4.close(); 
        if(sub_class!=null){ 
        sql="…. "; 
        ResultSet rs6 = stmt.executeQuery(sql); 
        while(rs6.next()){ 
        super_class= rs6.getString(1); 
        Sub_foreign_key= rs6.getString(2); 
         } 
        rs6.close(); 
        String s=sub_class+super_class; 
        Edge e3=g1.addEdge(s,sub_class, super_class, true); 
        e3.addAttribute("ui.label", "IS_A"); 
        isDelete=null; 
        /********************/ 
        sql=" "; 
        ResultSet rs11 = stmt.executeQuery(sql); 
        while(rs11.next()){ 
        table_trigger=rs11.getString(2); 
        trigger_name= rs11.getString(1); 
        isDelete= rs11.getBoolean(3); 
       } 
       rs11.close(); 
       /**********************/ 
       sql="……"; 
       ResultSet rs12 = stmt.executeQuery(sql); 
       while(rs12.next()){ 
       referenced_trigger=rs12.getString(1) ; 
       } 
       rs12.close(); 
       if(trigger_name!=null){ 
       if(isDelete=true){ 
       Node n7= g1.addNode(trigger_name); 
       n7.addAttribute("ui.label", "delete_event"); 
       n7.setAttribute("type", "event"); 
       n7.addAttribute("ui.style", "shape:triangle;"); 
       Edge e10=g1.addEdge("s", table_trigger, trigger_name, true); 
       Edge e7=g1.addEdge("j", trigger_name, referenced_trigger, true); 
        } 
       } 

     } 

然後我用這個圖來這種方式(一些commans隱藏):

for(int i=0;i<g1.getNodeCount();i++){ 
      Node node=g1.getNode(i); 
      node_label=node.getAttribute("ui.label"); 
      node_type=node.getAttribute("type"); 
    if(node_type.equals("event")){ 
       Edge efrom= node.getEdgeFrom(node); 
       Edge eTo=node.getEdgeToward(node); 
       Node src= efrom.getSourceNode(); 
       Node trg=eTo.getTargetNode(); 
       String ev_src=src.getAttribute("ui.label"); 
       String ev_trg=trg.getAttribute("ui.label"); 
           ….. } 
} 
for(int e=0;e<g1.getEdgeCount();e++){ 
      Edge edge=g1.getEdge(e); 
      edge_label=edge.getAttribute("ui.label"); 
      Node src_node=edge.getSourceNode(); 
      Node tar_node=edge.getTargetNode(); 
      target=tar_node.getAttribute("ui.label"); 
      source=src_node.getAttribute("ui.label"); 
       if(edge_label.equals("IS_A")) 
      { …… } 
} 

但它提供了錯誤:行Node src= efrom.getSourceNode(); Exception in thread "main" java.lang.NullPointerException當我ignor此行它給這個錯誤行: if(edge_label.equals("IS_A")) 我無法找到你problem.Thank求助。

回答

2

可能問題出在這一行Edge efrom= node.getEdgeFrom(node);檢查爲什麼node.getEdgeFrom(node)返回Null。

4

如果我有一個猜測,我會說node.getEdgeFrom(node)返回null因爲你嘗試調用空對象異常被提出,我認爲你應該檢查它。

+0

的EdgeFrom不爲空,並且具有至少1的值。 – user3060905

+0

請分享整個出來。 – bitli

+0

然後我覺得這個異常來自getSourceNode()方法,請分享一下這個方法的正文嗎? – bitli

0

看起來好像在整個代碼中都有很多的nullPointerExceptions。你是否需要將很多對象初始化爲空?

你可能想嘗試所有的字符串對象初始化爲這樣:

String node_labe; 
String node_type; 
String edge_label; 
String target; 
String source; 
String super_class; 
String sub_class; 
String table_trigger; 
String trigger_name; 
String referenced_trigger; 
String Sub_foreign_key; 

因爲字符串是不可改變的,你要離開他們未初始化,直到你有什麼你把他們。

乾杯, 戴夫

相關問題