-
Bug
-
Resolution: Fixed
-
P2
-
1.3.1
-
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)
======================================================================