Doe*_*ter 0 java exception nullpointerexception
大家好,我真的被卡住,我一直在接受java.lang.NullPointerException.我试图在每个可能的地方处理它,但我没有成功地做到这一点.这是家庭作业.如果你能看一下并给出一些关于java.lang.NullPointerException它的反馈,那就太好了.异常发生在Captain.handleProblem() 和MalfucntionHandler.proccessMalfunction()
public abstract class MalfunctionHandler
{
MalfunctionHandler next;
/**
* severity is a type of Severity
*/
Severity severity;
/**
* @param description describes the severity of the problem
*/
String description;
/**
* @param f file object that refers to the log-silver.txt
*/
File f = new File("log-silver.txt");
MalfunctionHandler(Severity severity)
{
this.severity = severity;
}
public String getDescription()
{
if(description == null)
{
description = "No description available. Probably serious.";
}
return description;
}
final protected void processMalfunction(Malfunction malfunction)
{
if (this.severity == malfunction.getSeverity())
{
handleProblem();
}
else
{
// if(malfunction == null)
next.processMalfunction(malfunction);
}
}
final protected void addHandler(MalfunctionHandler next)
{
this.next = next;
}
abstract void handleProblem();
public Severity getSeverity()
{
return severity;
}
}
public class Malfunction
{
/**
* severity is a type of Severity
*/
Severity severity;
/**
* @param description describes the severity of the problem
*/
String description;
Malfunction(Severity severity, String description)
{
this.description = description;
this.severity = severity;
}
public Severity getSeverity()
{
return severity;
}
public String getDescription()
{
if(description == null)
{
description = "No description available. Probably serious.";
}
return description;
}
}
public enum Severity
{
TRIVIAL, LOW, MEDIUM, HIGH
}
public class SpaceMonkey extends MalfunctionHandler {
MalfunctionHandler malfunction;
SpaceMonkey(Severity severity)
{
super(severity);
}
@Override
void handleProblem()
{
if(malfunction.getDescription() == null)
{
description = "No description available. Probably serious.";
}
FileUtility.writeFile(f, malfunction.getDescription());
FileUtility.writeFile(f, "---> Space monkey assigned to problem.");
}
}
public class ServiceRobot extends MalfunctionHandler {
MalfunctionHandler malfunction;
ServiceRobot(Severity severity)
{
super(severity);
}
void handleProblem()
{
if(malfunction.getDescription() == null)
{
description = "No description available. Probably serious.";
}
FileUtility.writeFile(f, malfunction.getDescription());
FileUtility.writeFile(f, "---> Service Robot assigned to problem.");
}
}
public class Engineer extends MalfunctionHandler
{
MalfunctionHandler malfunction;
Engineer(Severity severity)
{
super(severity);
}
void handleProblem()
{
if(malfunction.getDescription() == null)
{
description = "No description available. Probably serious.";
}
FileUtility.writeFile(f, malfunction.getDescription());
FileUtility.writeFile(f, "---> Engineer assigned to problem.");
}
}
public class Captain extends MalfunctionHandler
{
MalfunctionHandler malfunction ;
Captain(Severity severity)
{
super(severity);
}
@Override
void handleProblem( )
{
if(malfunction.getDescription() == null)
{
description = "No description available. Probably serious.";
}
FileUtility.writeFile(f, malfunction.getDescription());
FileUtility.writeFile(f, "---> Captain assigned to problem.");
}
}
Run Code Online (Sandbox Code Playgroud)
if(malfunction.getDescription() == null)
Run Code Online (Sandbox Code Playgroud)
你从来没有初始化的MalfunctionHandler对象类SpaceMonkey并试图调用它的getDescription()的方法handleProblem方法.在java Objects中,默认值为null,因为MalfunctionHandler出现故障; 在这里为null,并且您尝试在null上访问其方法.
因为你的MalfunctionHandler是一个抽象类,用它的子类初始化它(SpaceMonkey)
MalfunctionHandler malfunction; = new SpaceMonkey(Severity);
Run Code Online (Sandbox Code Playgroud)