pivot-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Noel Grandin (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PIVOT-815) Printing crashes with Out Of Memory exception
Date Thu, 03 Nov 2011 08:29:32 GMT

    [ https://issues.apache.org/jira/browse/PIVOT-815?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13142949#comment-13142949
] 

Noel Grandin commented on PIVOT-815:
------------------------------------

Can you try this patch, and change your PrintService code to call print(Graphics) instead
of paint(Graphics)


Index: ApplicationContext.java
===================================================================
--- ApplicationContext.java	(revision 1196545)
+++ ApplicationContext.java	(working copy)
@@ -455,6 +455,33 @@
         }
 
         @Override
+        public void print(Graphics graphics) {
+            // Intersect the clip region with the bounds of this component
+            // (for some reason, AWT does not do this automatically)
+            graphics.clipRect(0, 0, getWidth(), getHeight());
+
+            java.awt.Rectangle clipBounds = graphics.getClipBounds();
+            if (clipBounds != null
+                && !clipBounds.isEmpty()) {
+                try {
+                    // When printing, there is no point in using offscreen buffers.
+                    paintDisplay((Graphics2D)graphics);
+
+                    if (debugPaint) {
+                        graphics.setColor(new java.awt.Color(random.nextInt(256),
+                            random.nextInt(256), random.nextInt(256), 75));
+                        graphics.fillRect(0, 0, getWidth(), getHeight());
+                    }
+                } catch (RuntimeException exception) {
+                    System.err.println("Exception thrown during print(): " + exception);
+                    throw exception;
+                }
+            }
+
+            paintPending = false;
+        }
+
+        @Override
         public void update(Graphics graphics) {
             paint(graphics);
         }

                
> Printing crashes with Out Of Memory exception
> ---------------------------------------------
>
>                 Key: PIVOT-815
>                 URL: https://issues.apache.org/jira/browse/PIVOT-815
>             Project: Pivot
>          Issue Type: Bug
>          Components: wtk, wtk-terra
>    Affects Versions: 2.0
>         Environment: Windows 7 x64, Java 1.6.0_29
>            Reporter: Drazen Dotlic
>            Assignee: Sandro Martini
>              Labels: crash, outofmemory, printing
>             Fix For: 2.0.1
>
>
> Printing using Java's Printable interface... We have a single Pivot Window (it's an applet)
and the layout isn't really complicated. Implementing print method of the Printable interface
in our case boils down to drawing into the provided Graphics.
> This has worked perfectly until recently (not sure which version broke things, but we're
talking last few weeks). Now when we print we get an "Out of Memory" exception. Call stack
does not show any obvious anomalies like infinite loops and such, here it is:
> java.lang.OutOfMemoryError: Java heap space
> 	at java.awt.image.DataBufferInt.<init>(Unknown Source)
> 	at java.awt.image.Raster.createPackedRaster(Unknown Source)
> 	at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
> 	at java.awt.image.BufferedImage.<init>(Unknown Source)
> 	at sun.java2d.loops.GraphicsPrimitive.convertFrom(Unknown Source)
> 	at sun.java2d.loops.GraphicsPrimitive.convertFrom(Unknown Source)
> 	at sun.java2d.loops.MaskBlit$General.MaskBlit(Unknown Source)
> 	at sun.java2d.loops.Blit$GeneralMaskBlit.Blit(Unknown Source)
> 	at sun.java2d.pipe.DrawImage.blitSurfaceData(Unknown Source)
> 	at sun.java2d.pipe.DrawImage.renderImageCopy(Unknown Source)
> 	at sun.java2d.pipe.DrawImage.copyImage(Unknown Source)
> 	at sun.java2d.pipe.DrawImage.copyImage(Unknown Source)
> 	at sun.java2d.pipe.ValidatePipe.copyImage(Unknown Source)
> 	at sun.java2d.SunGraphics2D.drawImage(Unknown Source)
> 	at sun.java2d.SunGraphics2D.drawImage(Unknown Source)
> 	at sun.java2d.pipe.DrawImage.makeBufferedImage(Unknown Source)
> 	at sun.java2d.pipe.DrawImage.renderImageXform(Unknown Source)
> 	at sun.java2d.pipe.DrawImage.transformImage(Unknown Source)
> 	at sun.java2d.pipe.DrawImage.scaleImage(Unknown Source)
> 	at sun.java2d.pipe.DrawImage.copyImage(Unknown Source)
> 	at sun.java2d.pipe.DrawImage.copyImage(Unknown Source)
> 	at sun.java2d.pipe.ValidatePipe.copyImage(Unknown Source)
> 	at sun.java2d.SunGraphics2D.copyImage(Unknown Source)
> 	at sun.java2d.SunGraphics2D.drawImage(Unknown Source)
> 	at sun.java2d.SunGraphics2D.drawImage(Unknown Source)
> 	at sun.print.PeekGraphics.drawImage(Unknown Source)
> 	at org.apache.pivot.wtk.ApplicationContext$DisplayHost.paintVolatileBuffered(ApplicationContext.java:541)
> 	at org.apache.pivot.wtk.ApplicationContext$DisplayHost.paint(ApplicationContext.java:436)
> 	at com.barchart.realtime.core.service.PrintService.paint(PrintService.java:60)
> 	at com.barchart.realtime.core.service.PrintService.print(PrintService.java:84)
> 	at sun.print.RasterPrinterJob.printPage(Unknown Source)
> 	at sun.print.RasterPrinterJob.print(Unknown Source)
> If you need more info, do not hesitate to ask. I would have provided a test case, but
it's not easy to extract code from a commercial product. Besides, I suspect this is some kind
of obvious accidental mistake which should be easy to repeat with a very simple test case.pr

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message