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

Application hangs on the usage of Lexmark printers with PCL drivers

XMLWordPrintable

    • 2d
    • beta
    • generic, x86
    • generic, windows_nt

      printTab extends printerObject
      {
         static int tab_width = 0;

         int tab_dist;
         Font tabFnt;
         public printTab(Font tbFont, int tabdist)
         {
         tabFnt = tbFont;

         tab_dist = tabdist;

         }
         public void draw(Graphics g, Point p)
         {
         if (tab_width == 0)
          tab_width =
                      g.getFontMetrics(tabFnt).stringWidth("W");

         if (p.x < (tab_dist*tab_width))
           {
           p.x = tab_dist * tab_width;
           }
         }
      }
      (Review ID: 105657)
      ======================================================================
      I tried running an appln. in windows95 with Lexmark PCL driver
      The printer details are as follows:
       PrinterName: Lexmark PCL
       DriverName : LMPCL5C.DRV
       Driver Version : 4.00
       Data Format : RAW
       
      The printjob is spooled but there is no printout. Infact the
       whole appln. hangs and even ctrl-C doesn't work. To exit out of the appln. one has to do a ctrl-alt-del. The behaviour with this driver is not very consistent. It sometimes crashes the VM too.

      I am attaching a testcase - ImageFormat which could be used to reproduce the bug. This has a gif and a jpg to be printed in Landscape and Portrait mode.

      Along with this behaviour there is also an IllegalArgumentException(not always!!) thrown as follows:

      java.lang.IllegalArgumentException: Invalid ColorModel
              at sun.java2d.loops.DefaultComponent.IntRgbTo8bitDithered(Native Method)

              at sun.java2d.loops.IntRgbTo8bit.OpaqueBlit(DefaultComponent.java:1558)
              at sun.java2d.loops.RasterOutputManager.performOpaqueBlit(RasterOutputMa
      nager.java:1039)
              at sun.java2d.loops.RasterOutputManager.compositeSrcDst(RasterOutputMana
      ger.java:672)
              at sun.java2d.loops.RasterOutputManager.renderImage(RasterOutputManager.
      java:478)
              at sun.java2d.SunGraphics2D.renderingPipeImage(SunGraphics2D.java:2057)
              at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:1616)
              at sun.awt.windows.WGraphics.drawImage(WGraphics.java:438)
              at sun.awt.image.ImageRepresentation.drawToBufImage(ImageRepresentation.
      java:720)
              at sun.awt.windows.WGraphics.drawImage(WGraphics.java:393)
              at sun.awt.windows.WPrintGraphicsWrapper.drawImage(WPrintGraphicsWrapper
      .java:355)
              at DisplayImages.paint(ImageFormatTest.java:217)
              at java.awt.Component.print(Component.java:2143)
              at sun.awt.windows.WComponentPeer.print(WComponentPeer.java:158)
              at sun.awt.windows.WCanvasPeer.print(WCanvasPeer.java:81)
              at java.awt.GraphicsCallback$PeerPrintCallback.run(GraphicsCallback.java
      :91)
              at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:
      58)
              at java.awt.Component.printAll(Component.java:2159)
              at sun.awt.SunGraphicsCallback$PrintHeavyweightComponentsCallback.run(Su
      nGraphicsCallback.java:128)
              at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:
      58)
              at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:95
      )
              at sun.awt.windows.WPanelPeer.print(WPanelPeer.java:34)
              at java.awt.GraphicsCallback$PeerPrintCallback.run(GraphicsCallback.java
      :91)
              at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:
      58)
              at java.awt.Component.printAll(Component.java:2159)
              at ImageFormatTest.actionPerformed(ImageFormatTest.java:171)
              at java.awt.Button.processActionEvent(Button.java:333)
              at java.awt.Button.processEvent(Button.java:306)
              at java.awt.Component.dispatchEventImpl(Component.java:2593)
              at java.awt.Component.dispatchEvent(Component.java:2496)
              at java.awt.EventQueue.dispatchEvent(EventQueue.java:320)
              at java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:10

              at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:97)
              at java.awt.EventDispatchThread.run(EventDispatchThread.java:88)


      With the PostScript - the working is fine.
      Printing without the usage of JobAttributes and PageAttributes in jdk1.2.2-W is fine.
      Printing in kestrel-beta(jdk1.3-O) using the JobAttributes and PageAttributes - again results in application hanging.

      ****************
      The same behaviour is exhibited in jdk1.3.0-M build too.

      ###@###.### 1999-10-28

      ****************
      The printing is fine in winNT with Lexmark Printer using PCL drivers

      ###@###.### 1999-11-01


      *****************

      The application hangs in win95 in tje jdk1.3.0N build too.

      Further information on driver installed:

      Details of the PCL printer:
      ---------------------------

      Printer Model - Lexmark Optra S 1855
      Driver Name - LMPCL5C.DRV
      Driver version - 4.00
      Color Support - NO
      Port Name - \\PC-CUP03\redstar
      Data Format - RAW

      Files Used by this driver:
      lmpcl5c.drv (0.99.6.23)
      lmpcl5cx.dll (0.99.6.23)
      lmpcl5cc.dll (0.99.6.23)
      lmpclxc.dll (0.99.6.23)
      lmpcl5c.hlp
      lmpcl5c$.ini
      lexpsext.dll(4.02)
      lmpcl5c.inf
      lexdrvin.exe(1.11)
      ptapiw16.dll(5.50.00.00)
      ptzipw32.dll(5.50.00.00)
      lmdrv#.zip
      lexlmpm.dll(96,04,90,90)
      lexbce.dl_ (4,90,00,00)
      lexbces.ex_ (4,90,00,00)
      lexstart.ex_ (96,04,90,90)
      lmpclthk.dll
      LexxURL.tpl
      lmpclpp.dll (1,0,1,0)
      lmstatus.exe(0.99.6.23)

      These files are in windows\system.

      ###@###.### 1999-11-08

      Name: skT45625 Date: 06/07/2000


      when printing AWT style graphics on HP DeskJet 660

      Exception occurred during event dispatching:
      java.lang.IllegalArgumentException: Invalid ColorModel
              at sun.java2d.loops.DefaultComponent.IntRgbTo8bitDithered(Native Method)
              at sun.java2d.loops.IntRgbTo8bit.OpaqueBlit(DefaultComponent.java:1560)
              at sun.java2d.loops.RasterOutputManager.performOpaqueBlit
      (RasterOutputManager.java:1129)
              at sun.java2d.loops.RasterOutputManager.compositeSrcDst
      (RasterOutputManager.java:762)
              at sun.java2d.loops.RasterOutputManager.renderImage
      (RasterOutputManager.java:506)
              at sun.java2d.SunGraphics2D.renderingPipeImage(SunGraphics2D.java:2068)
              at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:1627)
              at sun.awt.windows.WGraphics.drawImage(WGraphics.java:532)
              at sun.awt.image.ImageRepresentation.drawToBufImage
      (ImageRepresentation.java:720)
              at sun.awt.windows.WGraphics.drawImage(WGraphics.java:487)
              at sun.awt.windows.WPrintGraphicsWrapper.drawImage
      (WPrintGraphicsWrapper.java:351)
              at AttributesV.drawComponent6(AttributesV.java:414)
              at AttributesV.drawComponent(AttributesV.java:229)
              at AttributesV.printComponent(AttributesV.java:727)
              at AttributesV.actionPerformed(AttributesV.java:663)
              at javax.swing.AbstractButton.fireActionPerformed
      (AbstractButton.java:1450)
              at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed
      (AbstractButton.java:1504)
              at javax.swing.DefaultButtonModel.fireActionPerformed
      (DefaultButtonModel.java:384)
              at javax.swing.DefaultButtonModel.setPressed
      (DefaultButtonModel.java:256)
              at javax.swing.plaf.basic.BasicButtonListener.mouseReleased
      (BasicButtonListener.java:216)
              at java.awt.Component.processMouseEvent(Component.java:3733)
              at java.awt.Component.processEvent(Component.java:3562)
              at java.awt.Container.processEvent(Container.java:1173)
              at java.awt.Component.dispatchEventImpl(Component.java:2611)
              at java.awt.Container.dispatchEventImpl(Container.java:1222)
              at java.awt.Component.dispatchEvent(Component.java:2515)
              at java.awt.LightweightDispatcher.retargetMouseEvent
      (Container.java:2465)
              at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2230)
              at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2139)
              at java.awt.Container.dispatchEventImpl(Container.java:1209)
              at java.awt.Window.dispatchEventImpl(Window.java:923)
              at java.awt.Component.dispatchEvent(Component.java:2515)
              at java.awt.EventQueue.dispatchEvent(EventQueue.java:401)
              at java.awt.EventDispatchThread.pumpOneEvent
      (EventDispatchThread.java:109)
              at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:99)
              at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

      printing AWT style on 1.2 + on an HP 660 causes an excaption, works ok on an
      epson 640.
      import java.awt.*;
      import java.awt.event.*;
      import java.util.*;

      public class printing extends Frame
        implements ActionListener, WindowListener
      {
         Button b, show;
         Printer printer;
         static boolean imagesloaded = false;
         Image image1;
      //--
         public printing()
         {
           super("print test"); //frame title;
           addWindowListener(this);
         ScrollPane scroller = new ScrollPane();
           Panel p = new Panel(); //spaces buttons
        // scroller.add( p);
         add (scroller);

           add("South", p);
           b = new Button("Print"); //2 buttons
           p.add("South", b);
           b.addActionListener(this);
           show = new Button("Show");
           p.add(show);
           show.addActionListener(this);

          scroller.add( printer = new Printer(this)); //printer added
      // scroller.setSize( 14000,14000);
          scroller.setSize( 800,2400);
          add(scroller, "Center");
          pack();

          // setBounds(100,100,200,200);
           setBounds(100,100,600,600);
           setVisible(true);
           //loadStrings(); //do printing here




         }
      //--
      private void loadStrings(boolean printit)
       {
       //puts the text into the Printer object
       int i = 1;
       int j =0;

        if(!imagesloaded)
          {
          System.out.println("load the images");
          image1 = getToolkit().getImage("pcmlogo1.gif");
          imagesloaded=true;
          }
          printer.printImage( image1);
          if(printit)
            printer.newPage(); //print on page

      }
      //--
      public void actionPerformed(ActionEvent ev)
       {
        Object obj = ev.getSource();
        if (obj == b)
         {

         loadStrings(true); //do printing here
         printer.endJob();

         }
        if (obj == show)
         {
          loadStrings(false);
          showPreview(); //or on screen
         }
       }
      //--
         private void showPreview()
         {
            Dimension d = printer.pageSize();
         // setBounds(100 , 100, 100,100);
           // setBounds(100 , 100, d.width, d.height);

            printer.setBounds(100,100, d.width, d.height);

            show();
            repaint();
            printer.setVisible(true);
         }
      //--
         static public void main(String argv[])
         {
            new printing();
         }
         //--

         public void windowClosing(WindowEvent wEvt)
         {
          System.exit(0); //exit on System exit box clicked
         }
         public void windowClosed(WindowEvent wEvt){}
         public void windowOpened(WindowEvent wEvt){}
         public void windowIconified(WindowEvent wEvt){}
         public void windowDeiconified(WindowEvent wEvt){}
         public void windowActivated(WindowEvent wEvt){}
         public void windowDeactivated(WindowEvent wEvt){}

      }
      //===============================================
      class Printer extends Canvas
      {
         Frame f; //parent frame
         PrintJob pjob; //printjob object
         Graphics pg; //printer graphics handle
         Vector objects; //array of printer instructions
         Point pt; //current printer position
         Font fnt; //current font
         Font tabFont; //font to use in tab calcns


      public Printer(Frame frm)
      {
         f = frm; //save form
         f.add(this); //add this object to form
         setVisible(false);//but do not show it
         pjob = null; //no print job yet

         pt =new Point( 100, 100); //initialize print posn
         objects = new Vector(); //and print objects
         tabFont = new Font("MonoSpaced", Font.PLAIN, 12);
         fnt = new Font("SansSerif", Font.PLAIN, 12);

      }
      //--
      public void setFont(Font f)
      {
        objects.addElement(new printFont(f));
      }
      //--
      public void print(String s)
      {
         objects.addElement(new printString(s));
      }
      //--
      public void println(String s)
      {
          print(s);
          objects.addElement(new newLine());
      }

      public void printO ( Point p)
      {
        objects.addElement(new printOval(p));
      }
      public void printImage (Image i)
      {
        objects.addElement(new printImage(i));
      }
      //--
      public void newPage()
      {
       if (pjob == null ) {
      // This code is to use the java dialog box
      //JobAttributes jobAtt = new JobAttributes();
      //jobAtt.setDefaultSelection(JobAttributes.DefaultSelectionType.SELECTION);
      //jobAtt.setDialog(JobAttributes.DialogType.COMMON);
      //PageAttributes pageAtt = new PageAttributes();
      //pjob = Toolkit.getDefaultToolkit().getPrintJob(f, "Printing Test", jobAtt,
      pageAtt);
      // output the printer job
      // props.list(System.out);

          pjob = getToolkit().getPrintJob(f, "Printer", null);
          System.out.println(getToolkit().getColorModel());
        }
        pg = pjob.getGraphics();
        print(pg);
      pg.dispose();
        pt =new Point( 100, 100); //initialize print position
        objects= null;
        objects = new Vector(); //and print objects


      }
      //--
      public void finalize()
      {
       // if (objects.size() > 0)
       // newPage(true);
         endJob();
      }
      //--
      public void endJob()
      {
         pjob.end();
         pjob = null;
      }
      //--
      public void tab(int tabstop)
      {
         objects.addElement(new printTab(tabFont, tabstop));
      }
      //--
      public Dimension pageSize()
      {
      if (pjob == null)
      // return new Dimension(620, 790);
           return new Dimension(800,2400);
      else
         {
            pjob = getToolkit().getPrintJob(f, "Printer", null);
      // return new Dimension(800,2400);
            return pjob.getPageDimension();
         }
      }
      //--
      public void paint(Graphics g)
      {
         pt = new Point(100,100);
         print(g); //displays text as preview
      }
      //--
      public void print(Graphics g)
       {
          printerObject p;
          f.setFont(fnt); //always start with some font


       for (int i = 0; i < objects.size(); i ++)
       {

          p = (printerObject)objects.elementAt(i);

          p.draw(g, pt);
       }

       }
      } //end class
      //===================================================

      abstract class printerObject
      {
         abstract void draw(Graphics g, Point p);
      }
      //===================================================

      class newLine extends printerObject
      {
       //--
         public void draw(Graphics g, Point p)
         {
         p.x = 0;

         p.y += g.getFontMetrics(g.getFont()).getHeight();

         }
      }
      //=====================================================

      class printString extends printerObject
      {
         String st;
         public printString(String s)
         {
            st = s;

         }
         //--
      public void draw(Graphics g, Point p)
       {
       g.drawString(st, p.x, p.y);
       p.x += g.getFontMetrics(g.getFont()).stringWidth(st);

       }
      }


      class printOval extends printerObject
      {
         Point pt1;
         public printOval(Point p)
         {
            pt1 = p;
         }
         //--
      public void draw(Graphics g, Point p)
       {

       g.setColor(Color.red);
       g.fillOval(p.x, p.y,pt1.x,pt1.y);
       p.x =0 ;
       p.y +=pt1.y+20;
       g.setColor(Color.black);

       }

      }


      class printImage extends printerObject
      {
         Image aImage;
         static boolean once=false;
         public printImage(Image i)
         {
            aImage = i;
            once=false;
         }
         //--
      public void draw(Graphics g, Point p)
       {

        int imagewidth=aImage.getWidth(null);
        int imageheight=aImage.getHeight(null);

             g.drawImage(aImage, p.x, p.y,imagewidth,imageheight, null );

          // System.out.println("point = " + p);
          p.x = 0 ;
          p.y = p.y + imageheight + 20;

          //System.out.println("point = " + p);
       }

      }








      //===================================================

      class printFont extends printerObject
      {
         Font fnt;
         static boolean dumpfont=true;
         public printFont(Font f)
         {
            fnt = f;




         }
        //--
      public void draw(Graphics g, Point p)
       {
         g.setFont(fnt);
         if(dumpfont)
           {
            System.out.println( g.getFont());
            dumpfont=false;
            }

         if (p.y <= 0)
            {
             p.y = g.getFontMetrics(fnt).getHeight();

            }


       }
      }
      //===================================================

      class

            prr Philip Race
            duke J. Duke
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: