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

JFrame.printAll() leads to NullPointerException

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P1 P1
    • None
    • 1.1.5, 1.2.0
    • client-libs
    • None
    • x86, sparc
    • solaris_2.5.1, windows_95

      I have a simple program that should print a JFrame that contains a JScrollPane. I'd like to print the whole thing, but when I try to do so, I get the following exception:

      Exception occurred during event dispatching:
      java.lang.NullPointerException
              at java.awt.Rectangle.intersects(Rectangle.java:383)
              at java.awt.Container.print(Container.java:769)
              at sun.awt.motif.MComponentPeer.print(MComponentPeer.java:172)
              at sun.awt.motif.MPanelPeer.print(MPanelPeer.java:41)
              at sun.awt.motif.MFramePeer.print(MFramePeer.java:174)
              at java.awt.Component.printAll(Component.java:1395)
              at ScrollerTest.print(ScrollerTest.java:85)
              at QWSTKey.keyPressed(ScrollerTest.java:109)
              at java.awt.Component.processKeyEvent(Component.java:2247)
              at com.sun.java.swing.JFrame.processKeyEvent(JFrame.java:106)
              at java.awt.Component.processEvent(Component.java:2138)
              at java.awt.Container.processEvent(Container.java:894)
              at java.awt.Window.processEvent(Window.java:315)
              at java.awt.Component.dispatchEventImpl(Component.java:1764)
              at java.awt.Container.dispatchEventImpl(Container.java:939)
              at java.awt.Window.dispatchEventImpl(Window.java:443)
              at java.awt.Component.dispatchEvent(Component.java:1704)
              at java.awt.EventDispatchThread.run(EventDispatchThread.java:63)
      ^

      Here's the program


      File 1

      // ScrollerTest.java

      /**
       * <B>ScrollerTest</B> is a simple class that has a main. Used to test things.
       * in libraries;
       *
       * @version $Id$
       *
       *
       */

      import java.awt.Color;
      import java.awt.Container;
      import java.awt.Dimension;
      import java.awt.Graphics;
      import java.awt.Toolkit;
      import java.awt.PrintJob;

      import java.awt.event.InputEvent;
      import java.awt.event.KeyAdapter;
      import java.awt.event.KeyEvent;

      import com.sun.java.swing.JFrame;

      import com.sun.apps.frameworks.foundation.LFAssert;

      import ScrollPanePanel;

      import com.sun.java.swing.UIManager;

      public class ScrollerTest
          extends
      Container
      {
      //
      // Protected Constants
      //
          static protected int WIDTH = 500;
          static protected int HEIGHT = 400;

          static protected String TITLE = "ScrollerTest";

      //
      // Class Variables
      //

      //
      // Instance Variables
      //

      static protected JFrame frame = null;

      //
      // General Methods
      //

      static public void main(String args[])
      {
          LFAssert.setEnabled(true);

          frame = new JFrame(ScrollerTest.TITLE);
          frame.setForeground(Color.lightGray);

          Dimension screenSize, initialSize = new Dimension(WIDTH, HEIGHT);

          screenSize = Toolkit.getDefaultToolkit().getScreenSize();
          
          frame.setSize(initialSize);
          frame.setLocation(screenSize.width/2 - initialSize.width/2,
      screenSize.height/2 - initialSize.height/2);
          frame.getContentPane().add(new ScrollPanePanel());
          frame.addKeyListener(new QWSTKey());
          frame.show();
      }

      static public void print()
      {
          PrintJob pj = Toolkit.getDefaultToolkit().getPrintJob(frame,
      "ScrollerTest",
      null);
          Graphics pg = pj.getGraphics();
          frame.printAll(pg);
          return;
      }

      } // end of class ScrollerTest

      class QWSTKey extends KeyAdapter
      {

      public void keyPressed(KeyEvent e)
      {
          
          int keyCode = e.getKeyCode();
          
          switch (keyCode) {
          case KeyEvent.VK_ENTER:
      break;
          case KeyEvent.VK_BACK_SPACE:
      // delete selection;
      break;
          case KeyEvent.VK_DELETE:
      // delete selection;
      break;
          case KeyEvent.VK_TAB:
      ScrollerTest.print();
      break;
          case KeyEvent.VK_LEFT:
      break;
          case KeyEvent.VK_RIGHT:
      break;
          case KeyEvent.VK_UP:
      break;
          case KeyEvent.VK_DOWN:
      break;
          case KeyEvent.VK_ALT:
          case KeyEvent.VK_CAPS_LOCK:
          case KeyEvent.VK_CONTROL:
          case KeyEvent.VK_META:
          case KeyEvent.VK_SHIFT:
      // a modifier key: ignore it
      break;
          case KeyEvent.VK_UNDEFINED:
      break;
          default:
      break;
          }

      }
      } // end of class QWSTKey

      File 2


      import com.sun.java.swing.*;

      import java.awt.*;
      import java.awt.event.*;

      /*
       * @version 1.12 10/06/97
       * @author Jeff Dinkins
       */
      public class ScrollPanePanel extends JPanel {

          public ScrollPanePanel() {
              setLayout(new BorderLayout());
      add("Center", new TigerScrollPane());
          }

      }

      class TigerScrollPane extends JScrollPane {

          private JLabel makeLabel(String name, String description) {
      String filename = "images/" + name;
      ImageIcon image = new ImageIcon(filename, description);
      return new JLabel(image);
          }

          public TigerScrollPane() {
      super();

      JLabel horizontalRule = makeLabel("scrollpane/header.gif", "Horizontal ruler carved out of stone");
      JLabel verticalRule = makeLabel("scrollpane/column.gif", "Vertical ruler carved out of stone");
      JLabel tiger = makeLabel("BigTiger.gif","A rather fierce looking tiger");

      JLabel cornerLL = makeLabel("scrollpane/corner.gif","Square chunk of stone (lower left)");
      JLabel cornerLR = makeLabel("scrollpane/corner.gif","Square chunk of stone (lower right)");
      JLabel cornerUL = makeLabel("scrollpane/corner.gif","Square chunk of stone (upper left)");
      JLabel cornerUR = makeLabel("scrollpane/corner.gif","Square chunk of stone (upper right)");

      setViewportView(tiger);
      setRowHeaderView(verticalRule);
      setColumnHeaderView(horizontalRule);

      setCorner(LOWER_LEFT_CORNER, cornerLL);
      setCorner(LOWER_RIGHT_CORNER, cornerLR);
      setCorner(UPPER_LEFT_CORNER, cornerUL);
      setCorner(UPPER_RIGHT_CORNER, cornerUR);
          }
          
          public Dimension getMinimumSize() {
      return new Dimension(25, 25);
          }
          
          public boolean isOpaque() {
              return true;
          }
      }

      In addition, you need to have the following hierarchy in the same directory as the compiled .class files

       
      ./images:
      BigTiger.gif scrollpane
       
      ./images/scrollpane:
      01.gif 02s.gif 04.gif 05s.gif column.gif main.gif
      01s.gif 03.gif 04s.gif 06.gif corner.gif
      02.gif 03s.gif 05.gif 06s.gif header.gif


      For your convenience I have placed all of this at

      cd /net/arago.eng/ProjectsLocal/edburns/scratch/bugtraq

      To use the program have JDK1.1.5, Swing0.6.1 in your classpath,

      java ScrollerTest

      Press the <TAB> key to pop up the print dialog. Fill it out, and press
      the <PRINT> button.

      I was requested to reopen this bug and I have done so.


      ed.burns@Eng 1998-03-18

            Unassigned Unassigned
            ejburns Ed Burns (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: