waitingimageobserver.java
来自「JfreeChart 常用图表例子」· Java 代码 · 共 180 行
JAVA
180 行
/* ======================================================================== * JCommon : a free general purpose class library for the Java(tm) platform * ======================================================================== * * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. * * Project Info: http://www.jfree.org/jcommon/index.html * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * ------------------------- * WaitingImageObserver.java * ------------------------- * (C)opyright 2000-2004, by Thomas Morgner and Contributors. * * Original Author: Thomas Morgner * Contributor(s): Stefan Prange; * * $Id: WaitingImageObserver.java,v 1.2 2005/05/20 12:38:50 mungady Exp $ * * Changes (from 8-Feb-2002) * ------------------------- * 15-Apr-2002 : first version used by ImageElement. * 16-May-2002 : Line delimiters adjusted * 04-Jun-2002 : Documentation and added a NullPointerCheck for the constructor. * 14-Jul-2002 : BugFixed: WaitingImageObserver dead-locked (bugfix by Stefan * Prange) * 18-Mar-2003 : Updated header and made minor Javadoc changes (DG); * 21-Sep-2003 : Moved from JFreeReport. */package org.jfree.util;import java.awt.Graphics;import java.awt.Image;import java.awt.image.BufferedImage;import java.awt.image.ImageObserver;import java.io.Serializable;/** * This image observer blocks until the image is completely loaded. AWT * defers the loading of images until they are painted on a graphic. * * While printing reports it is not very nice, not to know whether a image * was completely loaded, so this observer forces the loading of the image * until a final state (either ALLBITS, ABORT or ERROR) is reached. * * @author Thomas Morgner */public class WaitingImageObserver implements ImageObserver, Serializable, Cloneable{ /** For serialization. */ static final long serialVersionUID = -807204410581383550L; /** The lock. */ private boolean lock; /** The image. */ private Image image; /** A flag that signals an error. */ private boolean error; /** * Creates a new <code>ImageObserver<code> for the given <code>Image<code>. * The observer has to be started by an external thread. * * @param image the image to observe (<code>null</code> not permitted). */ public WaitingImageObserver(final Image image) { if (image == null) { throw new NullPointerException(); } this.image = image; this.lock = true; } /** * Callback function used by AWT to inform that more data is available. The * observer waits until either all data is loaded or AWT signals that the * image cannot be loaded. * * @param img the image being observed. * @param infoflags the bitwise inclusive OR of the following * flags: <code>WIDTH</code>, <code>HEIGHT</code>, * <code>PROPERTIES</code>, <code>SOMEBITS</code>, * <code>FRAMEBITS</code>, <code>ALLBITS</code>, * <code>ERROR</code>, <code>ABORT</code>. * @param x the <i>x</i> coordinate. * @param y the <i>y</i> coordinate. * @param width the width. * @param height the height. * * @return <code>false</code> if the infoflags indicate that the * image is completely loaded; <code>true</code> otherwise. */ public boolean imageUpdate( final Image img, final int infoflags, final int x, final int y, final int width, final int height) { if ((infoflags & ImageObserver.ALLBITS) == ImageObserver.ALLBITS) { this.lock = false; this.error = false; } else if ((infoflags & ImageObserver.ABORT) == ImageObserver.ABORT || (infoflags & ImageObserver.ERROR) == ImageObserver.ERROR) { this.lock = false; this.error = true; } return true; } /** * The workerthread. Simply draws the image to a BufferedImage's * Graphics-Object and waits for the AWT to load the image. */ public void waitImageLoaded() { final BufferedImage img = new BufferedImage( 1, 1, BufferedImage.TYPE_INT_RGB ); final Graphics g = img.getGraphics(); while (this.lock) { if (g.drawImage(this.image, 0, 0, img.getWidth(this), img.getHeight(this), this)) { return; } try { Thread.sleep(200); } catch (InterruptedException e) { Log.info( "WaitingImageObserver.waitImageLoaded(): InterruptedException thrown", e ); } } } /** * Clones this WaitingImageObserver. * * @return a clone. * * @throws CloneNotSupportedException this should never happen. */ public Object clone() throws CloneNotSupportedException { final WaitingImageObserver obs = (WaitingImageObserver) super.clone(); return obs; } /** * Returns true if there is an error condition, and false otherwise. * * @return A boolean. */ public boolean isError() { return this.error; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?