Problema no Código [resolvido]

5 respostas
E

Estou tentando aprender a fazer uma impressão em Java, me baseando no código que encontrei em um livro. Ao rodar, da o seguinte erro:

java.lang.NullPointerException

at PrintTestFrame.(PrintTest.java:30)

at PrintTest.main(PrintTest.java:12)

Exception in thread main

E o código que copiei do livro é esse abaixo: Alguém poderia me ajudar a solucionar esse problema?
Muito obrigado…

import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.print.*;
import java.util.*;
import javax.swing.*;

public class PrintTest {

	public static void main(String[] args) {
		JFrame frame = new PrintTestFrame();
		frame.show();
	}
}
class PrintTestFrame extends JFrame implements ActionListener{
	public PrintTestFrame(){
		setTitle("Impressão Teste");
		setSize(300,300);
		addWindowListener(new WindowAdapter()
				{
				public void windowClosing(WindowEvent e){
			       System.exit(0);
			       }
	  });
	  Container contentPane = getContentPane();
	  canvas = new PrintPanel();
	  contentPane.add(canvas, "Center");
	  JPanel buttonPanel = new JPanel();
	  printButton.addActionListener(this);
	  
	  pageSetupButton = new JButton("Page Setup");
	  buttonPanel.add(pageSetupButton);
	  pageSetupButton.addActionListener(this);
	  
	  contentPane.add(buttonPanel, "North");
	}
	
    public void actionPerformed(ActionEvent event)
{
    	Object source = event.getSource();
    	if(source == printButton){
    		PrinterJob printJob = PrinterJob.getPrinterJob();
    		if (pageFormat == null)
    			pageFormat = printJob.defaultPage();
    		printJob.setPrintable(canvas,pageFormat);
    		if (printJob.printDialog()){
    			try{
    				printJob.print();
    			}
    			catch (PrinterException exception){
    				JOptionPane.showMessageDialog(this, exception);
    			}
    			
    			
    			}
    			}
            else if (source == pageSetupButton){
            	PrinterJob printJob = PrinterJob.getPrinterJob();
            	if(pageFormat == null)
            		pageFormat = printJob.defaultPage();
            	pageFormat = printJob.pageDialog(pageFormat);
    		}
    	}
     private JButton printButton;
     private JButton pageSetupButton;
     private PrintPanel canvas;
     private PageFormat pageFormat;
     
}

 class PrintPanel extends JPanel implements Printable{
 	public void paintComponent(Graphics g){
 		super.paintComponent(g);
 		Graphics2D g2 = (Graphics2D)g;
 		drawPage(g2);
 	}
 	public int print(Graphics g, PageFormat pf, int page)
 	   throws PrinterException{
 		if (page >= 1) return Printable.NO_SUCH_PAGE;
 		Graphics2D g2 = (Graphics2D)g;
 		g2.setPaint(Color.black);
 		g2.translate(pf.getImageableX(), pf.getImageableY());
 		g2.draw(new Rectangle2D.Double(0, 0, pf.getImageableWidth(), pf.getImageableHeight()));
 		
 		drawPage(g2);
 		return Printable.PAGE_EXISTS;
 	}
 	public void drawPage(Graphics2D g2){
 		FontRenderContext context = g2.getFontRenderContext();
 		Font f = new Font("Serif", Font.PLAIN, 72);
 		GeneralPath clipShape = new GeneralPath();
 		
 		TextLayout layout = new TextLayout("Hello", f, context);
 		AffineTransform transform = AffineTransform.getTranslateInstance(0, 72);
 		Shape outline = layout.getOutline(transform);
 		clipShape.append(outline, false);
 		
 		layout = new TextLayout("World", f, context);
 		transform = AffineTransform.getTranslateInstance(0, 144);
 		outline = layout.getOutline(transform);
 		clipShape.append(outline, false);
 		
 		g2.draw(clipShape);
 		g2.clip(clipShape);
 		
 		final int NLINES = 50;
 		Point2D p = new Point2D.Double(0, 0);
 		for (int i = 0; i < NLINES; i++){
 			double x = (2 * getWidth() * i) / NLINES;
 			double y = (2 * getHeight() * (NLINES - 1 - i)) / NLINES;
 			Point2D q = new Point2D.Double(x, y);
 			g2.draw(new Line2D.Double(p, q));
 		}
 	}
 	 
 }

5 Respostas

E

Complementando a citação do meu problema, ao clicar em cima da linha com a mensagem: at PrintTestFrame.(PrintTest.java:30)
Ele da uma informação : “Source not found for PrintTestFrame”
De novo, se alguém puder me ajudar a solucionar, agradeço…

pcalcado

Quando vc for postar codigo, coloque-o entre as tags [ code] e [ /code], assim ele ficará endentado.

Shoes

E

Beleza, mas dá pra ajudar?
Valeu…

_fs

NPE indica que está tentando acessar algo de um objeto não inicializado.

Que tal ler a exceção e ver a linha 30 do código?

printButton.addActionListener(this);

printButton é uma variável que ainda não foi inicializada, ou seja, faltou um

printButton = new JButton( "imprimir" );
E

Felipe,

Valeu cara, o problema era esse mesmo :)
Criado 27 de junho de 2005
Ultima resposta 27 de jun. de 2005
Respostas 5
Participantes 3