Implementando impressao

Galera, blz

Peguei uma classe pronta e estou tentando adaptar ao meu sistema e implementar impressão nele. Após algumas simples modificações, fiz um teste; compilou sem apresentar erros, mas quando executo gera os erros abaixo que não tenho a mínima ideia do que pode ser:

****** ERRO:

Arquivo temporario : C:\WINDOWS\TEMP\Atv18124
java.lang.NullPointerException
at CadAtivo.mtPrint(CadAtivo.java:958)
at CadAtivo$12.actionPerformed(CadAtivo.java:427)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1764)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1817)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:227)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:227)
at java.awt.Component.processMouseEvent(Component.java:5093)
at java.awt.Component.processEvent(Component.java:4890)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3598)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3439)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
at java.awt.Container.dispatchEventImpl(Container.java:1609)
at java.awt.Window.dispatchEventImpl(Window.java:1585)
at java.awt.Component.dispatchEvent(Component.java:3439)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)

<<<<<<<<<<<<<<<< meu CODIGO >>>>>>>>>>>>>>>>>>>>

public void mtPrint(ActionEvent e)
{
ResultSet resultSet;
File tmpFile;
String[] docHead;
try
{
tmpFile = File.createTempFile(“Atv”, “”);
System.out.println("Arquivo temporario : "+ tmpFile.getAbsolutePath());
docHead= new String[3];
docHead[0]=“A.M.S - Softwares”;
docHead[1]=“Listagem de Ativos”;
docHead[2]=“Codigo - Descricao - Usuario”;

     try
     {
        resultSet = this.statement.executeQuery("SELECT codigo,apelido,usuario FROM tbAtivo WHERE codigo&lt;10 ORDER BY 1");
        RandomAccessFile raf;
        try
        {
           raf = new RandomAccessFile(tmpFile, "rw");
           String aativ="";
           String rativ="";
           while(resultSet.next())
           {
              String line="";
              String nForm="";
              String crLf="\r";

              rativ=""+resultSet.getObject(1);
              if(!rativ.equals(aativ))
              {
                 if(aativ.length()&gt;0)
                    raf.writeBytes(" "+crLf);
                 raf.writeBytes("======================="+crLf);
                 raf.writeBytes("Listagem de Ativos: "+rativ+crLf);
                 raf.writeBytes("======================="+crLf);
                 raf.writeBytes(" "+crLf);
                 aativ=rativ;
              }
              nForm= (""+resultSet.getObject(2)).trim();
              nForm= "0000".substring(nForm.length())+nForm;
              line+= nForm;
              line+= " - ";
              line+= ""+resultSet.getObject(3);
              line+= " - ";
              line+= ""+resultSet.getObject(4);
              line+=crLf;
              raf.writeBytes(line);
           }
           raf.close();
        }
        catch(Exception eraf)
        {
           System.out.println("Erro abrindo arquivo : "+eraf);
        } 
     } 
     catch (SQLException ex)
     {
        System.err.println(ex);
     }
  
     PrinterJob job = PrinterJob.getPrinterJob();
     job.setPrintable(new FormPrint(tmpFile, docHead));
     job.setCopies(1);     
     if(job.printDialog())
     {
        try
        {
           job.print();
        }
        catch (Exception ej)
        {
           System.out.println("Erro de job : "+ ej);
        }
     } 
     tmpFile.delete();  
  }  
  catch(IOException eTmp)
  {
     System.out.println("Erro com arquivo tmp : "+ eTmp);
  }     

}

}

class FormPrint implements Printable
{
private RandomAccessFile raf;
private String fileName;
private String[] docHead;
private Font fntnorm = new Font(“Courier”, Font.PLAIN, 10);
private Font fnthead = new Font(“Helvetica”, Font.BOLD, 12);
private int rememberedPageIndex = -1;
private long rememberedFilePointer = -1;
private boolean rememberedEOF = false;

public FormPrint(File tmpFile, String[] docHead)
{
this.docHead = docHead;
this.fileName = tmpFile.getAbsolutePath();
try
{
raf = new RandomAccessFile(fileName, “r”);
}
catch (Exception e)
{
rememberedEOF = true;
}
}

public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException
{
try
{
if (pageIndex != rememberedPageIndex)
{
rememberedPageIndex = pageIndex;
if (rememberedEOF) return Printable.NO_SUCH_PAGE;
rememberedFilePointer = raf.getFilePointer();
}
else raf.seek(rememberedFilePointer);
g.setColor(Color.black);
int x = (int) pf.getImageableX() + 10;
int y = (int) pf.getImageableY() + 12;
g.setFont(fnthead);
g.drawString(docHead[0], x, y);
y += 16;
g.drawString(docHead[1]+ " pagina : " + pageIndex+1, x, y);
y += 16;
g.setFont(fntnorm);
g.drawString(docHead[2], x, y);
y += 36;
while (y + 12 < pf.getImageableY()+pf.getImageableHeight())
{
String line = raf.readLine();
if (line == null)
{
rememberedEOF = true;
break;
}
if(line.length()==0) line=" "+line;
g.drawString(line, x, y);
y += 12;
}
return Printable.PAGE_EXISTS;
}
catch (Exception e)
{
return Printable.NO_SUCH_PAGE;
}
}
}

Se quiezeres experiementa este código
Para mim funciona, tens apeneas de passar como parametro o ficheiro a imprimir (caminho incluido)

public class printer {

        JFrame frame;
        JButton btn;
        private boolean PrintJobDone = false;
        
        
        printer(String FileToPrint, String pMode) {
            
            try {

// Open the image file
InputStream is = new BufferedInputStream(new FileInputStream(FileToPrint));

// Find the default service
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

                if (pMode != null &amp;&amp; pMode.equalsIgnoreCase("TXT"))
                    ;
                else if (pMode != null &amp;&amp; pMode.equalsIgnoreCase("PS"))
                    flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
                else if (pMode != null &amp;&amp; pMode.equalsIgnoreCase("PDF"))
                    flavor = DocFlavor.INPUT_STREAM.PDF;
                else if (pMode != null &amp;&amp; pMode.equalsIgnoreCase("JPG"))
                    flavor = DocFlavor.INPUT_STREAM.JPEG;
                else if (pMode != null &amp;&amp; pMode.equalsIgnoreCase("GIF"))
                    flavor = DocFlavor.INPUT_STREAM.GIF;
                else if (pMode != null &amp;&amp; pMode.equalsIgnoreCase("PNG"))
                    flavor = DocFlavor.INPUT_STREAM.PNG;
                else if (pMode != null &amp;&amp; pMode.equalsIgnoreCase("PCL"))
                    flavor = DocFlavor.INPUT_STREAM.PCL;
                else if (pMode != null &amp;&amp; pMode.equalsIgnoreCase("RAW"))
                    flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
                
                PrintService dservice = PrintServiceLookup.lookupDefaultPrintService();
                
                PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
                
                if (services == null || services.length &lt; 1)
                    services = PrintServiceLookup.lookupPrintServices(null, null);
                
                PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
                aset.add(new Copies(1));
                aset.add(OrientationRequested.PORTRAIT);
                aset.add(Sides.ONE_SIDED);
                aset.add(MediaSizeName.ISO_A4);
                
                
                PrintService service = ServiceUI.printDialog(
                        (GraphicsConfiguration) null,
                        60, 60,
                        services,
                        (PrintService) dservice,
                        (DocFlavor) flavor,
                        aset);
                
                if (service != null) {

// Create the print job
final DocPrintJob job = service.createPrintJob();

                    Doc doc = new SimpleDoc(is, flavor, null);

// Monitor print job events; for the implementation of PrintJobWatcher,

                    PrintJobWatcher pjDone = new PrintJobWatcher(job);
                    
                    
                    
                    try {

// Print it

                        job.print(doc, (PrintRequestAttributeSet) aset);
                        
                    } catch (PrintException e) {
                        e.printStackTrace();
                    }

// Wait for the print job to be done
pjDone.waitForDone();

                }

// It is now safe to close the input stream
is.close();

            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                
                try {
                    
                    synchronized (printer.this) {
                        PrintJobDone = true;
                        printer.this.notify();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                
            }
        }
        
        
        public synchronized void waitForDone() {
            try {
                while (!PrintJobDone) {
                    wait();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        
        
        
        class PrintJobWatcher {

// true iff it is safe to close the print job’s input stream
boolean done = false;

            int lastEvent = 0;
            
            
            PrintJobWatcher(DocPrintJob job) {

// Add a listener to the print job
job.addPrintJobListener(
new PrintJobAdapter() {

                    public void printJobRequiresAttention(PrintJobEvent pje) {
                        lastEvent = pje.getPrintEventType();
                        System.err.println("* Erro na Impressora:" + pje);

                    }
                    
                    public void printDataTransferCompleted(PrintJobEvent pje) {
                        lastEvent = pje.getPrintEventType();
                        System.err.println("* Ficheiro enviado para a Impressora ");

                    }
                    
                    public void printJobCanceled(PrintJobEvent pje) {
                        lastEvent = pje.getPrintEventType();
                        allDone();
                    }
                    
                    
                    public void printJobCompleted(PrintJobEvent pje) {
                        lastEvent = pje.getPrintEventType();
                        allDone();
                    }
                    
                    
                    public void printJobFailed(PrintJobEvent pje) {
                        lastEvent = pje.getPrintEventType();
                        System.err.println("* ERRO de impressão" + pje);

// allDone();
}

                    public void printJobNoMoreEvents(PrintJobEvent pje) {
                        lastEvent = pje.getPrintEventType();
                        System.err.println("* Todos os Ficheiros foram enviados para a impressora ");
                        allDone();
                    }
                    
                    
                    void allDone() {
                        
                        synchronized (PrintJobWatcher.this) {
                            done = true;
                            PrintJobWatcher.this.notify();
                        }
                    }
                });
            }
            
            
            public synchronized void waitForDone() {
                try {
                    while (!done) {
                        wait();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        
    }
}