Java多线程空指针异常

Java多线程空指针异常,java,multithreading,synchronization,Java,Multithreading,Synchronization,我正在做这个程序,我一直得到一个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() {

我正在做这个程序,我一直得到一个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);
        }
}
}
//构造函数
公共长任务(SharedResults sharedData、int start、int end)
{
超级(“线程”);
sharedData=this.sharedData;
start=this.start;
结束=这个。结束;
}
//跑
公开募捐{
整数和=0;
对于(int num=start;num您的问题是:

sharedData=this.sharedData;
start = this.start;
end=this.end;
您被分配了方法级变量以获得类级变量的值。这需要另一种方式。按照现在编写的方式,您的共享数据将始终为
null
,因为它从未在构造函数中分配。因此,稍后,当您调用

 sharedData.addToResult(sum);

您正在调用并试图对空对象引用调用此方法,这解释了您的
NullPointerException

如果您需要分配字段变量而不是参数值,则需要以其他方式执行此操作,例如“this.sharedData=sharedData”如果这一部分让您感到困惑,请使用不同的变量名作为参数值。