Java-апплет блокирует окно IE во время печати - PullRequest
0 голосов
/ 15 февраля 2011

Я создал 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;
    }
}

1 Ответ

0 голосов
/ 15 февраля 2011

Я бы попытался порождать другой поток Java только для «функции печати». Это должно позволить вашему апплету функционировать во время выполнения действия печати.Пожалуйста, посмотрите на этот документ Java:

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

Я никогда не пробовал это с апплетом, но я думаю, что это должно решить проблему, с которой вы столкнулись.Кроме того, вам, вероятно, понадобится провести некоторый рефакторинг вашего кода, чтобы он корректно работал с Thread API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...