2014-02-07 2 views
-1

두 클래스로 PDF를 생성하려고했지만 문서를 생성하는 함수에서 호출하는 줄에 NullPointerException이 있기 때문에 PDF가 생성되지 않았습니다. 두 번째 수업에서. 첫 번째 클래스에는 다른 많은 필요한 기능이 있기 때문에 pdf 생성 프로세스를 구분합니다. 이 문제의 원인을 모르겠습니다.itextpdf와 함께 pdf를 생성하려고 할 때 NullPointerException이 발생했습니다.

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(); 

    } 

} 
+0

개인 Eml2Pdf2 eml2Pdf2 = 새로운 Eml2Pdf2(); 인스턴스화하지 않고 객체의 메소드에 액세스하려고합니다. 그러므로 NPE. – TEK

답변

1

당신은 Managepdf에 eml2Pdf2을 인스턴스화하지 않습니다.

private Eml2Pdf2 eml2Pdf2; 

은 다음과 같아야합니다

private Eml2Pdf2 eml2Pdf2 = new Eml2Pdf2(); 

또한 각 클래스를 확인하는 것이 좋습니다의 생성자를 가지고; 생성자로서 절대적으로 필수적이지는 않지만 암시 적으로 생성됩니다. 생성자는 필드 변수를 인스턴스화하는 이상적인 장소입니다 (NPE를 피하는 좋은 방법).