NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
Dependence on JDK 1.3 was accidentally introduced in the visad/DisplayActivity.java class. A new version of this class that does not depend on JDK 1.3 is attached. I will try to update the ftp server tommorrow. As to your other error, and the errors you sent me privately, do you have both source and the visad.jar file containing precompiled class files in your CLASSPATH? The 'Invalid class file format' error is a mystery to me, unless there are classes in your CLASSPATH compiled under different JDK versions. Bill On Mon, 29 Oct 2001, Chhaya Mudgal wrote: > I am getting following error > > DisplayActivity.java:4: Class java.util.Timer not found in import. > import java.util.Timer; > ^ > DisplayActivity.java:154: Superclass java.util.TimerTask of inner class > visad.DisplayActivity. BusyTask not found. > extends java.util.TimerTask > ^ > error: Invalid class file format in ./ij/process/ImageProcessor.class. > invalid constant type: 0 > /export/home/johnf/chhaya/visad/util/DataUtility.java:0: Class > ij.process.ImageProcessor not found in class ij.process.ColorProcessor. > // > > please tell me what am i missing. > thanks > > Chhaya > > >
package visad; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.Timer; import visad.DisplayImpl; public class DisplayActivity { private static final int DEFAULT_IDLE_SECONDS = 1; private static final boolean DEBUG = false; private transient DisplayImpl dpy; private int interval; private long lastBusyEvt; private boolean isBusy; private transient Timer busyTimer; private transient BusyAction busyAction; private transient ArrayList handlerList; /** * Manage busy/idle handlers for a Display, using a default * idle time of 1 second. * * @param dpy Display to manage. */ public DisplayActivity(DisplayImpl dpy) { this(dpy, DEFAULT_IDLE_SECONDS); } /** * Manage busy/idle handlers for a Display, using the specified * idle time. * * @param dpy Display to manage. * @param seconds Number of seconds to wait before the Display * is considered idle. */ public DisplayActivity(DisplayImpl dpy, int seconds) { this.dpy = dpy; this.interval = seconds * 1000; lastBusyEvt = System.currentTimeMillis() - this.interval; isBusy = false; busyAction = new BusyAction(); busyTimer = new Timer(this.interval, busyAction); busyTimer.removeActionListener(busyAction); busyAction = null; handlerList = new ArrayList(); } /** * Stop the idle timer and any running tasks. */ public void destroy() { synchronized (busyTimer) { if (busyAction != null) { busyTimer.removeActionListener(busyAction); busyAction = null; } busyTimer.stop(); } } /** * Add a new activity handler. */ public void addHandler(ActivityHandler ah) throws VisADException { if (handlerList == null) { throw new VisADException("No handler list found; was this object serialized?"); } if (!busyTimer.isRunning()) { busyTimer.restart(); } handlerList.add(ah); } /** * Remove an activity handler. */ public void removeHandler(ActivityHandler ah) throws VisADException { if (handlerList == null) { throw new VisADException("No handler list found; was this object serialized?"); } handlerList.remove(ah); if (handlerList.size() == 0 && busyTimer.isRunning()) { busyTimer.stop(); } } /** * Notify all handlers of a transition from idle to busy or vice versa. * * @param isBusy <tt>true</tt> if the Display is now busy. */ private void notifyList(boolean isBusy) { if (handlerList != null && busyTimer != null) { synchronized (handlerList) { final int len = handlerList.size(); for (int i = 0; i < len; i++) { ActivityHandler ah = (ActivityHandler )handlerList.get(i); if (isBusy) { ah.busyDisplay(dpy); } else { ah.idleDisplay(dpy); } } } } } /** * Notify the activity monitor that work has been done. */ public void updateBusyStatus() { final long now = System.currentTimeMillis(); if (!isBusy && (now < lastBusyEvt || now > lastBusyEvt + interval)) { // Display is doing something... isBusy = true; if (busyAction == null && busyTimer != null) { synchronized (busyTimer) { if (busyAction == null) { // create a busy task busyAction = new BusyAction(); // have busy action called at the specified interval busyTimer.addActionListener(busyAction); if (DEBUG) System.err.println("STARTED"); } } } if (DEBUG) System.err.println("BUSY"); // let handlers know that Display is busy notifyList(true); } // remember when Display was last busy lastBusyEvt = now; } private class BusyAction implements ActionListener { private static final int MAX_IDLE = 10; private int idleCount = 0; BusyAction() { } public void actionPerformed(ActionEvent evt) { if (!isBusy) { // another interval has passed where display wasn't busy idleCount++; // if it's been long enough... if (idleCount > MAX_IDLE) { // ... and there's a timer object... if (busyTimer != null) { // ...stop the timer synchronized (busyTimer) { busyTimer.removeActionListener(busyAction); busyAction = null; if (DEBUG) System.err.println("CANCELLED"); } } } } else { final long now = System.currentTimeMillis(); if (lastBusyEvt + interval <= now) { // if we're past the waiting period, we must be idle isBusy = false; idleCount = 0; if (DEBUG) System.err.println("IDLE"); // let handlers know that Display is idle notifyList(false); } } } } }
visad
archives: