Name: rmT116609			Date: 07/13/2001
java version "1.3.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24)
Java HotSpot(TM) Client VM (build 1.3.1-b24, mixed mode)
If I compile this program with no options, and run it with no
options, it gets a NullPointerException.  If I run it with
-classic, it runs to completion.  The latter behavior appears
to be the correct one.
$ d:/jdk1.3.1/bin/javac Bug.java
$ d:/jdk1.3.1/bin/java -cp . Bug
java.lang.NullPointerException
	at java.util.HashMap.get(HashMap.java:266)
	at Bug$ObjectSet.get(Bug.java:15)
	at Bug$ObjectSet.representation(Bug.java:28)
	at Bug$ObjectSet.write(Bug.java:42)
	at Bug.main(Bug.java:67)
Exception in thread "main"
import java.lang.reflect.*;
import java.lang.*;
import java.io.*;
import java.util.*;
public class Bug
{
   private static class ObjectSet {
      private HashMap        objectMap = new HashMap();
      private static int     objectCount = 0;
      private LinkedList     workList = new LinkedList();
      Integer        get(Object o) {
         Integer ref = (Integer) objectMap.get(o);
         if (ref == null) {
            ref = new Integer(++ objectCount);
            objectMap.put(o, ref);
            workList.add(o);
         }
         return ref;
      }
      void representation(Object o)
      {
         if (o != null) {
            get(o);
         }
      }
      void write() throws Exception
      {
         while (! workList.isEmpty()) {
            Object o = (Object) workList.removeFirst();
            Class clazz = o.getClass();
            if (clazz.isArray()) {
               final int length = Array.getLength(o);
               // For every member of the array...
               for (int i = 0; i < length; i++) {
                  representation(Array.get(o, i));
               }
            } // end array
            else {
               while (clazz != null) {
                  Field fields [] = clazz.getDeclaredFields();
                  // For each field of this object...
                  for (int i = 0; i < fields.length; i++) {
                     Field f = fields[i];
                     f.setAccessible(true);
                     representation(f.get(o));
                  }
                  clazz = clazz.getSuperclass();
               }
            } // end non-array object
         } // end worklist loop
      } // end write
   } // end ObjectSet
   public static void main (String [] args) throws Exception
   {
      ObjectSet os = new ObjectSet();
      Exception e = new Exception("here");
      os.get(e);
      os.write();
   }
}
With JDK 1.4.0-beta:
=========================
C:\>java Bug
#
# HotSpot Virtual Machine Error, Internal Error
# Please report this error at
# http://java.sun.com/cgi-bin/bugreport.cgi
#
# Error ID: 43113F32554E54494D45110E4350500314
#
# Problematic Thread: prio=5 tid=0x00761990 nid=0xd5 runnable
#
C:>java -server Bug
#
# HotSpot Virtual Machine Error, Internal Error
# Please report this error at
# http://java.sun.com/cgi-bin/bugreport.cgi
#
# Error ID: 53484152454432554E54494D450E435050014C
#
# Problematic Thread: prio=5 tid=0x00761990 nid=0xa1 runnable
#
(Review ID: 127894) 
======================================================================
###@###.### 11/3/04 00:32 GMT