我有一个主类:
public class Retrigger {
public static void main(String[] args){
Long i= 97944605L;
com.armus.flow.Implement rdf = new com.armus.flow.Implement();
try {
rdf.retrfail(i);
}
catch(Throwable e){
System.out.println("In exception a = "+e+" "+i);
e.printStackTrace();
return;
}
}
}
我调用Implement
类的方法retrfail
并传递一个长值:
import com.armus.common.Dsessionservice;
public class Implement
extends Remote
implements DMSer, Ajaxser {
private Dsessionservice flowservice;
private Dsession getDsession(long sessionId)
throws ServiceException {
try {
dss = this.flowservice.getprocessname(Long.valueOf(sessionId));
}
catch (ServerException e) {
//some code
}
//some code
}
public void retrfail(long sessionId) {
Dsession dss = getDsession(sessionId);
// some code
}
}
实现类将 id 传递给其他 Dsessionservice 接口以获取进程名称。
public abstract interface Dsessionservice
{
public abstract Dsessionservice getprocessname(Long paramLong)
throws ServerException;
}
程序编译正常。但是在以下行运行程序时我java.lang.nullpointerexception
dss = this.flowservice.getprocessname(Long.valueOf(sessionId));
我在这里做错了什么。
有人可以帮忙吗?
你忘了初始化你的flowserive
变量。
在 Java 中,当您声明像private Dsession flowserive;
这样的变量时,它不会初始化为任何内容,因此没有成员方法getprocessname(...)
尝试在此方法不存在时访问此方法会引发java.lang.nullpointerexception
。
尝试这样的事情:
import com.armus.common.Dsession;
public class Implement
extends Remote
implements DMSer, Ajaxser
{
private Dsession flowserive;
// ADDING CONSTRUCTOR HERE ////
public Implement() {
this.flowservice = new Dsession(); // Or initialize with any parameters you need
}
///////////////////////////////
private Dsession getDsession(long sessionId)
throws ServiceException
{
try
{
dss = this.flowserive.getprocessname(Long.valueOf(sessionId));
}
catch (ServerException e)
{
//some code
}
//some code
public void retrfail(long sessionId)
{
Dsession dss = getDsession(sessionId);
// some code
}
}
很抱歉我不知道您的 Dsession 类,所以也许您需要更改它以正确初始化 Dsession 对象......