获取java.lang.nullpointer异常,当将参数传递给其他类的私有类时



我有一个主类:

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 对象......

最新更新