Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Printing in Threads

Posted on 1999-01-25
3
Medium Priority
?
378 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 1

Expert Comment

by:malexiev
ID: 1234639
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
ID: 1234640
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 400 total points
ID: 1234641
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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Java had always been an easily readable and understandable language.  Some relatively recent changes in the language seem to be changing this pretty fast, and anyone that had not seen any Java code for the last 5 years will possibly have issues unde…
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
Suggested Courses

609 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