Java 多线程空指针异常
Java Multithreading null pointer exception
我正在处理这个程序,但我一直收到 NullPointerException,我不确定为什么。
//Constructor
public LongTask(SharedResults sharedData,int start, int end)
{
super("Thread");
sharedData=this.sharedData;
start = this.start;
end=this.end;
}
//Run
public void run() {
int sum = 0;
for (int num = start; num<=end;num++)
{
sum+=num;
try {
Thread.sleep((long)(5000*Math.random()));
}
catch (InterruptedException e)
{}
sharedData.addToResult(sum);
}
}
}
我最终收到 NullPointerException 错误。看起来我的数据没有被正确汇总。
您的问题是:
sharedData=this.sharedData;
start = this.start;
end=this.end;
您被分配了方法级别变量以具有 class 级别变量的值。这需要反过来。按照现在的编写方式,您的 SharedData 将始终为 null
因为它永远不会在构造函数中分配。所以稍后,当你打电话给
sharedData.addToResult(sum);
您正在尝试在空对象引用上调用此方法,这解释了您的 NullPointerException
。
我正在处理这个程序,但我一直收到 NullPointerException,我不确定为什么。
//Constructor
public LongTask(SharedResults sharedData,int start, int end)
{
super("Thread");
sharedData=this.sharedData;
start = this.start;
end=this.end;
}
//Run
public void run() {
int sum = 0;
for (int num = start; num<=end;num++)
{
sum+=num;
try {
Thread.sleep((long)(5000*Math.random()));
}
catch (InterruptedException e)
{}
sharedData.addToResult(sum);
}
}
}
我最终收到 NullPointerException 错误。看起来我的数据没有被正确汇总。
您的问题是:
sharedData=this.sharedData;
start = this.start;
end=this.end;
您被分配了方法级别变量以具有 class 级别变量的值。这需要反过来。按照现在的编写方式,您的 SharedData 将始终为 null
因为它永远不会在构造函数中分配。所以稍后,当你打电话给
sharedData.addToResult(sum);
您正在尝试在空对象引用上调用此方法,这解释了您的 NullPointerException
。