2011-02-14 61 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。