首页 > 解决方案 > 通过多线程上传多个文件时面对 Nullpointer

问题描述

我正在尝试使用多个线程将多个文件数据上传到数据库。

控制器层

System.out.println("saveStudent");
for (int i = 1; i < 10; i++)
{
    Thread t = new Thread(new FileHandlerClass("test" + i + ".csv"));
    t.start();
}

@Component
public class FileHandlerClass
    implements Runnable
{
    public FileHandlerClass()
    {
    }

    @Autowired
    private SpringbootService service;
    private String fileName;

    public FileHandlerClass(String fileName)
    {
        System.out.println(fileName);
        this.fileName = fileName;
    }

    @Override
    public void run()
    {
        this.service.saveStudent(this.fileName); // Facing nullpointer exception here
    }
}

但我得到一个空指针异常 this.service.saveStudent(this.fileName);.

在此处输入图像描述

我该如何解决?

删除 @Autowired 有效,但我不知道为什么在使用上述代码时它没有初始化 bean。

private SpringbootService service;
private String fileName;

public FileHandlerClass(String fileName, SpringbootService service)
{
    System.out.println(fileName);
    this.fileName = fileName;
    this.service = service;
}

@Override
public void run()
{
    service.saveStudent(this.fileName);
}

标签: javaspringmultithreadingautowired

解决方案


你没有初始化service,因此当你打电话时this.service.saveStudent(this.fileName)你得到NullPointerException. 请参阅农民关于为什么@Autowired不起作用的答案。

另外,一般提示:我将删除以下构造函数:

public FileHandlerClass()
{

}

因为这可能会引入一个为 null 的场景fileName,这也会导致NullPointerException.


推荐阅读