Problemas com impressão

Estou com um problema na linha 20. O getGraphics não está retornando nada e dá um erro NullPointerException.
Estava tentando usar uma impressora na rede.
Alguém pode me dizer o pq do erro?

[code]import java.awt.;
import java.awt.Graphics.
;
import java.io.*;

public class ImprimirArquivo {
public static void main(String a[]) throws IOException{
// frame temporário
Frame f = new Frame("Teste de Impressão");
f.pack();

// obtenção do Toolkit
Toolkit tk = f.getToolkit();

// inicio de sessão de impressão
PrintJob pj = tk.getPrintJob(f, "print1", null);
    
// impressão
if (pj!=null) { // testa de PrintJob válido
  
  [b]Graphics g = pj.getGraphics();[/b] // obtém contexto gráfico

  g.drawString("Teste de Impressão", 10, 10);
  int y=25;
BufferedReader in = new BufferedReader(new FileReader(a[0]));
//taOutput.setText("");
String line;
//StringBuffer buffer = new StringBuffer();
while((line = in.readLine()) != null)
	{g.drawString(line, 25, y);
	y+=25;}
in.close();
  g.drawLine(25, 250, 325, 250);
  g.fillOval(150, 225, 50, 50);
  // liberação dos recursos
  g.dispose(); // libera recursos do contexto gráfico
  pj.end();    // encerra impressão
}

// liberação do Frame temporário
f.dispose();
// fim
System.exit(0);

}
}[/code]

Agora vai mano[code]

import java.awt.print.;
import java.awt.
;
import javax.swing.*;

public class ImpressaoGenerica implements Printable{

private String[] linhas;
private String cabecalho, rodape;
private int cont_linhas, folha;

public ImpressaoGenerica( ){
	
	this.folha = 1;
	this.cabecalho = "TESTE";
	this.rodape = "TESTANDO";
	
}

public int print(Graphics g, PageFormat pf, int pageIndex){
	
	try{
		
		g.setFont(new Font("Arial",Font.BOLD, 18));
		g.drawString(cabecalho, 60, 75);
		
		g.setFont(new Font("Courier",Font.PLAIN, 10));
		
			
		g.drawString( "Teste" , 20, 140 );
		
		g.setFont(new Font("Arial",Font.PLAIN, 10));
		g.drawString( rodape, 79,  660 );
	}
	catch( Exception e ){
	
		e.printStackTrace();
		JOptionPane.showMessageDialog(null, "Exception3: " + e.toString());
	}
	
	return Printable.PAGE_EXISTS; 
}


public static void main(String args[]){
	try{
		
		PrinterJob job = PrinterJob.getPrinterJob(); 
		PageFormat landscape = job.defaultPage(); 
		
		Paper paper = new Paper();

		paper.setImageableArea(0, 0, 600, 900);
		paper.setSize(600, 900);

		landscape.setPaper( paper );
		
		Book bk = new Book();
		
		bk.append( new ImpressaoGenerica(  ), landscape );
		
		job.setPageable(bk); 
		
		if (job.printDialog()) { 
		
			try {
			
				job.print();
			} 
			catch(Exception exc){
				
				exc.printStackTrace();
				JOptionPane.showMessageDialog(null, "Exception1: " + exc.toString());
			} 
		}
	}
	catch( Exception e ){
		
		e.printStackTrace();
		JOptionPane.showMessageDialog(null, "Exception2: " + e.toString());
	}
}

}
[/code]

Agora uma dúvida de iniciante: eu usei esse seu exemplo pra imprimir um relatório de nomes de clientes…dai eu criei um while com drawstrings dentro pra ir imprimindo o nome deles(q tão armazenados num ResultSet)…como eu faço pra continuar imprimindo numa nova página?
Eu sei q em uma página cabem uns 60 clientes…
Eu estou passando os parâmetros de forma errada? Qual o jeito certo? Tem como dar um exemplo?
Valeu…

Outra dúvida d iniciante…

Vc diz usar impressora em rede… como se usa uma impressora em rede em java? Ou alguma outra maneira (eu preciso muito disso)