【问题标题】:Java Applet locks IE window during printingJava Applet 在打印期间锁定 IE 窗口
【发布时间】:2011-06-27 05:05:43
【问题描述】:

我创建了一个 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;
    }
}

【问题讨论】:

    标签: java asp.net html internet-explorer cross-browser


    【解决方案1】:

    我会尝试为“打印功能”生成另一个 Java 线程。这应该允许您的小程序在打印操作发生时运行。请看一下这个java文档:

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

    我从未尝试过使用小程序进行此操作,但我认为这应该可以解决您遇到的问题。此外,您可能需要对代码进行一些重构,以使其与 Thread API 一起正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多