Solved

Printing in Threads

Posted on 1999-01-25
3
368 Views
Last Modified: 2008-03-04
I need the user to be able to manuever within a GUI while the user is printing (from Java).
Im trying to get Java2D printing to run in a separate thread.
Java 2D printing sometimes takes 2-3 minutes to run, thats alot of time for a user to be staring at the screen.
I have a print method (in the GUI class) that has this code
fragment:

try  {
     PrinterJob printerjob= PrinterJob.getPrinterJob();
     PageFormat pf= printerjob.defaultPage();
     printerjob.setPrintable(new PrintGraphPainter(linegraph.getImages()),pf);
     if (printerjob.printDialog())  {  
          printerjob.print();                    
     }
}
catch (PrinterException pe)  {
     System.out.println("Print Error");
     pe.printStackTrace();
}

Heres the PrintGraphPainter class:
//PrintGraphPainter.java
import java.awt.*;
import java.awt.print.*;

class PrintGraphPainter implements Printable   {

     Image[] images;

     public PrintGraphPainter(Image[] images)  {
          this.images=images;
     }
     public synchronized int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException  {

          if (pageIndex < 1)   {
               Dimension f= new Dimension((int)pf.getImageableWidth(),(int)pf.getImageableHeight());
               int XIMG=(int) (f.width-10);   int YIMG=(int)(XIMG * .5042);
               int XIMG2=(int)(f.width-10);   int YIMG2=(int)(XIMG2 * .1433);
               int XIMG3=(int)(f.width-10);   int YIMG3=(int)(XIMG3 * .07163);
               g.drawImage(images[0],(int)pf.getImageableX(),(int)pf.getImageableY(),XIMG3,YIMG3,null);
               g.drawImage(images[1],(int)pf.getImageableX(),(int)pf.getImageableY()+YIMG3,XIMG,YIMG,null);  
               g.drawImage(images[2],(int)pf.getImageableX(),(int)pf.getImageableY()+YIMG3+YIMG,XIMG2,YIMG2,null);
               g.drawRect((int)pf.getImageableX(),(int)pf.getImageableY(),XIMG,YIMG+YIMG2+YIMG3);  
               return Printable.PAGE_EXISTS;
          }
          else
               return Printable.NO_SUCH_PAGE;
     }
}

Do I make the PrintGraphPainter class implement the Runnable interface?

Im using JDK1.2 on Win95.
0
Comment
Question by:mbunkows
  • 2
3 Comments
 
LVL 1

Expert Comment

by:malexiev
Comment Utility
I'm not familiar with Java 2D but I think you should put your "slow" part of code in a thread
like this :

Thread t = new Thread () {
  public void run() {
     try  {
       PrinterJob printerjob= PrinterJob.getPrinterJob();
       PageFormat pf= printerjob.defaultPage();
       printerjob.setPrintable(new PrintGraphPainter(linegraph.getImages()),pf);
       if (printerjob.printDialog())  {  
           printerjob.print();                      
       }
    }
    catch (PrinterException pe)  {
      System.out.println("Print Error");
      pe.printStackTrace();
    }
  }
};

t.start();
0
 

Author Comment

by:mbunkows
Comment Utility
Good thing I asked I thought this was actually going to take some work!
Post an answer and I'll give you an A
Thanks!
0
 
LVL 1

Accepted Solution

by:
malexiev earned 100 total points
Comment Utility
Here it is :

I'm not familiar with Java 2D but I think you should put your "slow" part of code in a thread
like this :

      Thread t = new Thread () {
        public void run() {
           try  {
             PrinterJob printerjob= PrinterJob.getPrinterJob();
             PageFormat pf= printerjob.defaultPage();
             printerjob.setPrintable(new PrintGraphPainter(linegraph.getImages()),pf);
             if (printerjob.printDialog())  {    
                 printerjob.print();                      
             }
          }
          catch (PrinterException pe)  {
            System.out.println("Print Error");
            pe.printStackTrace();
          }
        }
      };
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Suggested Solutions

For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
The viewer will learn how to implement Singleton Design Pattern in Java.

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now