2011-02-14 60 views
0

我已经创建了一个Java Applet,它将在IE中用于从远程服务器打印图像。Java Applet在打印过程中锁定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线程只是为“打印功能”这应该让你的小程序,而打印动作发生作用。请在这个Java文档看看:

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

我从来没有与一个applet试过,但我认为这应该可以解决你碰到的问题。此外,您可能需要对代码进行一些重构,才能正确使用Thread API。