我正在以流的形式传递2个文档,并尝试将它们合并为单个pdf . 在循环的第一次迭代中,一切正常,但在第二次迭代期间奇迹般地抛出空指针异常 . 传递的两个流实际上是相同的,被用作两个独立的流 .

代码:

public synchronized void doMerge(InputStream[] streams,OutputStream out) throws Exception {


    System.out.println("Starting To Merge Files...");
    System.out.println("Total Number Of Files To Be Merged..." +
                      streams.length + "\n");
    try {

        int fileIndex = 0;
        Document document = null;
        PdfCopy writer = null;
        PdfReader reader = null;

        for (fileIndex = 0; fileIndex < streams.length; fileIndex++) {


            System.out.println("Loop No : "+ (fileIndex+1));

            reader = new PdfReader(streams[fileIndex]);
            System.out.println("Reader "+ (fileIndex+1) +" created successfully");

            if (fileIndex == 0) {

            document = new Document();
            System.out.println("Document created successfully");

            writer = new PdfSmartCopy(document, out);
            System.out.println("Reader created successfully");

            document.open();

            }

            writer.addDocument(reader);
            System.out.println("Document "+ (fileIndex+1)+" merged" );
            reader.close();
            System.out.println("Reader "+ (fileIndex+1)+" closed" );
        }



        document.close();
        System.out.println("Document successfully closed");

        System.out.println("File has been merged and written to-" + out);
    }

    catch (Exception e) {
        System.out.println(in exception block");
        System.out.println(e.toString());
    }

}

这是我在输入中发送2个流时得到的输出:

Loop No : 1
Reader 1 created successfully
Document created successfully
Reader created successfully
Document 1 merged
Reader 1 closed
Loop No : 2
in exception block
java.lang.NullPointerException