在我的代码中,我正在从数据库构建图形。 我的代码的一些部分用于创建图形(我没有包括用于速记的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"))
我找不到问题。谢谢你的帮助。
答案 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;
因为字符串是不可变的,所以您希望将它们保持单元化,直到您将其放入其中。
干杯, 戴夫