Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4487512

setClip(null) causes NullPointerException during printing

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P2 P2
    • 1.4.0
    • 1.3.1
    • client-libs
    • 2d
    • beta2
    • x86
    • windows_nt



      Name: nt126004 Date: 08/02/2001


      java version "1.3.1"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24)
      Java HotSpot(TM) Client VM (build 1.3.1-b24, mixed mode)

      g.setClip(null) is a documented call to remove clipping during
      a repaint ( jdk documentation : Graphics/setClip )
      This works fine for display, but the usage of this call when printing
      causes following exception:

      Exception in thread "main" java.lang.NullPointerException
              at sun.java2d.PeekGraphics.addDrawingRect(PeekGraphics.java:1747)
              at sun.java2d.PeekGraphics.fill(PeekGraphics.java:1464)
              at SimpleViewer.paint(SimpleViewer.java:17)
              at SimpleViewer.print(SimpleViewer.java:41)
              at sun.java2d.RasterPrinterJob.printPage(RasterPrinterJob.java:677)
              at sun.java2d.RasterPrinterJob.print(RasterPrinterJob.java:342)
              at SimpleViewer.main(SimpleViewer.java:74)

      The example works fine, if we remove the "setClip(null)" line.
      Which other call may be used to remove the clipping ?

      Example demonstrating this problem:

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

      import java.awt.event.*;

      public class SimpleViewer extends JPanel
      implements Printable
      {
      public void paint(Graphics g)
      {
      //
      // Presence of this line forces later exception during printing
      //
      g.setClip(null);
      g.setColor(Color.white);
      ((Graphics2D)g).fill(new Rectangle(0,0,600,600));

      System.out.println("CLIP = "+g.getClipBounds());

      g.setColor(Color.red);


      g.drawString("TEST STRING",200,200);
      }

      //
      // Printable interface
      //
      public int print(Graphics g,PageFormat pf,int pageIndex)
      throws PrinterException
      {
      if(pageIndex > 0)
      {
      return Printable.NO_SUCH_PAGE;
      }

      paint(g);

      return Printable.PAGE_EXISTS;
      }

      public static void main(String arg[])
      {
      JFrame f = new JFrame("TEST");

      f.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {System.exit(0);}
      });

           f.getContentPane().setLayout(new BorderLayout());
      f.setSize(600,600);

      Container container = f.getContentPane();

      SimpleViewer sv = new SimpleViewer();
      container.add(sv,BorderLayout.CENTER);
      f.show();


      PrinterJob job = PrinterJob.getPrinterJob();
      PageFormat pf = job.defaultPage();
      PageFormat printFormat;

      if(job.printDialog())
      {
      printFormat = job.pageDialog(pf);
      job.setPrintable(sv,printFormat);
      try
      {
      job.print();
      }
      catch (PrinterException e)
      {
      System.out.println(e);
      }
      }
      }
      }
      (Review ID: 128170)
      ======================================================================

            jgodinez Jennifer Godinez (Inactive)
            nthompsosunw Nathanael Thompson (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: