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

Java hangs rendering a shape with max. coordinates much greater than 32K

XMLWordPrintable

    • 2d
    • beta
    • generic, x86, sparc
    • generic, solaris_2.5.1, solaris_8, windows_nt

      /**
       *
       * Demonstrate Java hang when rendering a Shape with max. coordinates
       * much greater than 32K.
       *
       * Item 16
       * 10/3/2000
       *
       *
       * Displaying a Shape in Graphics2D with coordinates much greater than 32K
       * using the default transform and clip causes Java to hang.
       *
       * The problem occurs under WinNT 4.0, Win95, Win98, and Solaris 8 iwth
       * the 1.2.2 and 1.3 JVMs.
       *
       * The program below draws a Shape which is a triangle, and the sole
       * command line argument is a number used as the maximum x and y
       * coordinates of the triangle.
       *
       * In other words it draws a filled triangle with coordinates: (0,0),
       * (0,n), (n,n)
       *
       * 33052 may be a magic number for this problem on Solaris.vi
       *
       *
       *
       * To reproduce:
       * javac gifclient/ClipBugViewer.java
       *
       * java gifclient.ClipBugViewer 64000
       */
      package gifclient;

      import java.awt.*;
      import java.awt.event.*;
      import java.awt.geom.*;
      import javax.swing.*;

      /** demonstrate clipping bug
       */
      public class ClipBugViewer extends JPanel {

      private Shape m_shape;

      public ClipBugViewer()
      {
      }

      public void paintComponent(Graphics g)
      {
      super.paintComponent(g);

      Graphics2D g2d = (Graphics2D) g;
      if (m_shape != null)
      {
      System.out.println("paintComponent()");
      g2d.setColor(Color.blue);
      System.out.println("paintComponent() about to draw");
      g2d.draw(m_shape);
      System.out.println("paintComponent() about to fill");
      g2d.fill(m_shape);
      System.out.println("paintComponent() returning");
      }

      }

      public void setShape(Shape shape)
      {
      m_shape = shape;
      }

      public static final void main(String [] args) throws Exception
      {
      int bound = 32000;
      if (args.length > 0)
      try {
      bound = Integer.parseInt(args[0]);
      } catch (NumberFormatException e) {
      System.err.println("Usage: ClipBugViewer <#>" +
      " Supply an upper bound, default is 32000");
      };
      ClipBugViewer viewer = new ClipBugViewer();
      viewer.setSize(new Dimension(600, 600));

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

      GeneralPath path = new GeneralPath();
      path.moveTo(0, 0);
      path.lineTo(0, bound);
      path.lineTo(0 + bound, bound);

      path.closePath();

      viewer.setShape(path);

      frame.setSize(new Dimension(600, 600));
      frame.setVisible(true);
      frame.getContentPane().add(viewer);

      frame.repaint();
      }
      }

            flar Jim Graham
            tgould Tom Gould (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: