2011-02-14 4 views
0

IE에서 원격 서버의 이미지를 인쇄하는 데 사용할 Java 애플릿을 만들었습니다.인쇄 도중 Java 애플릿이 IE 창을 잠급니다.

메인 웹 페이지의 새 팝업 창에 애플릿을로드하면 인쇄가 잘되지만 인쇄하는 동안 새 팝업 브라우저 창이 잠 깁니다.

인쇄 작업이 완료되면 팝업 창이 다시 반응합니다.

기본 브라우저 창은 인쇄하는 동안 계속 작동합니다.

출력 과정에서 팝업이 잠기지 않도록 할 수 있습니까?

package javaprint; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import java.awt.image.ImageObserver; 
import java.awt.print.*; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.Proxy; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.imageio.ImageIO; 

public class jPrinter implements Printable 
{ 

    String ASP_NET_SessionId = null; 
    ArrayList<URL> pages = new ArrayList<URL>(); 
    BufferedImage lastImage = null; 
    int lastRequestedIndex = 1; 

    public EcPrinter(ArrayList<URL> pages, String sessionId) 
    { 
     Thread.currentThread().setPriority(Thread.MIN_PRIORITY); 
     ImageIO.setUseCache(false); 
     this.pages = pages; 
     ASP_NET_SessionId = sessionId; 
    } 

    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) 
    { 
     if (pageIndex < pages.size()) 
     { 
      URL url = pages.get(pageIndex); 

      BufferedImage img = null; 

      if (pageIndex == lastRequestedIndex) 
      { 
       img = lastImage; 
      } 
      else 
      { 
       URLConnection connection = url.openConnection(Proxy.NO_PROXY); 
       connection.setRequestProperty("Cookie", "ASP.NET_SessionId=" + ASP_NET_SessionId); 
       InputStream is = connection.getInputStream(); 
       img = ImageIO.read(is); 
       lastImage = img;    
      } 

      graphics.drawImage(img, 0, 0, null); 

      return PAGE_EXISTS; 
     } 
     return NO_SUCH_PAGE; 
    } 
} 

답변

0

"인쇄 기능"대신 다른 Java 스레드를 생성하려고합니다. 인쇄 작업이 진행되는 동안 애플릿이 작동 할 수 있어야합니다. 이 자바 문서에서 봐 주시기 바랍니다 :

http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html

나는 애플릿이 시도 적이 있지만, 나는 이것이 당신이로 실행하는 문제를 해결한다고 생각합니다. 또한 Thread API를 제대로 사용하려면 코드를 리팩터링해야 할 수도 있습니다.

관련 문제