Java 当我尝试使用itextpdf生成pdf时出现NullPointerException

Java 当我尝试使用itextpdf生成pdf时出现NullPointerException,java,pdf,pdf-generation,itext,itextpdf,Java,Pdf,Pdf Generation,Itext,Itextpdf,我试图用两个类生成pdf,但是,我没有得到pdf,因为我在调用第二个类中生成文档的函数的行中有一个NullPointerException。我将生成pdf的过程分开,因为第一个类有许多其他必要的函数。我不知道是什么导致了这个问题 package org.ors.osc; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExce

我试图用两个类生成pdf,但是,我没有得到pdf,因为我在调用第二个类中生成文档的函数的行中有一个NullPointerException。我将生成pdf的过程分开,因为第一个类有许多其他必要的函数。我不知道是什么导致了这个问题

package org.ors.osc;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.ors.osc.Eml2Pdf2;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;

import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

public class Managepdf {

  private Eml2Pdf2 eml2Pdf2;

  public publishPdf2()  {
  Document doc = new Document();
  File pdfFile = dataDir.resourcePdfFile(resource.getShortname());
  OutputStream out = null;

  try {
      out = new FileOutputStream(pdfFile);
      PdfWriter.getInstance(doc, out);
      eml2Pdf2.writeEmlIntoPdf(doc); //In this part get null
  } catch (Exception e) {
        e.printStackTrace();
  } finally {
      if (out != null) {
          try {
                  out.close();
                } catch (IOException e) {
                  e.printStackTrace();
          }
      }
  }  
 }

}
此类调用函数writeEmlIntoPdf

package org.ors.oscar;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;


import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;

import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

public class Eml2Pdf2 {

    public void writeEmlIntoPdf (Document doc) throws DocumentException, FileNotFoundException {

        doc.open();
        doc.add(new Paragraph("Hello World, iText!!"));
        doc.add(new Paragraph(":D"));
        doc.close();

    }

}

您从未在Managepdf中实例化eml2Pdf2

private Eml2Pdf2 eml2Pdf2;
应该是:

private Eml2Pdf2 eml2Pdf2 = new Eml2Pdf2();
确保每个类都有一个构造函数也是一个很好的实践;虽然不是严格意义上的必需,但构造函数将被隐式创建。
构造函数是实例化字段变量的理想场所(避免获取NPE的好方法)。

private Eml2Pdf2 Eml2Pdf2=new Eml2Pdf2();您试图访问对象的方法而不实例化它;因此,NPE。