线程“main”java.lang.NullPointerException中的异常

时间:2014-01-08 15:41:02

标签: java graph

在我的代码中,我正在从数据库构建图形。 我的代码的一些部分用于创建图形(我没有包括用于速记的sql命令):

    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"))
             {   …… }
}

但它在行Exception in thread "main" java.lang.NullPointerException中出现错误:Node src= efrom.getSourceNode(); 当我忽略这一行时,它为行提供了这个错误: if(edge_label.equals("IS_A")) 我找不到问题。谢谢你的帮助。

3 个答案:

答案 0 :(得分:4)

如果我有一个猜测,我会说node.getEdgeFrom(node)返回null因为你尝试调用null对象异常,我认为你应该检查它。

答案 1 :(得分:2)

可能问题出在这一行Edge efrom= node.getEdgeFrom(node);检查为什么node.getEdgeFrom(node)返回Null。

答案 2 :(得分:0)

看起来整个代码中都有很多nullPointerExceptions。你需要将那么多对象初始化为null吗?

您可能希望尝试初始化所有字符串对象:

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;

因为字符串是不可变的,所以您希望将它们保持单元化,直到您将其放入其中。

干杯, 戴夫