Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4094523

NullPointerException in the Introspector when a class is not found

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P3 P3
    • None
    • 1.1.4
    • client-libs
    • sparc
    • solaris_2.5.1



      Name: dgC58589 Date: 11/21/97


      I use 'java BeanDumper frogbean.Frog' with the class
      frogbean.Spots missing and I get

      $javac BeanDumper.java
      $javac frogbean.Frog.java
      $ rm frogbean/Spots.class
      $java BeanDumper frogbean.Frog
      java.lang.NullPointerException
              at java.util.Hashtable.put(Hashtable.java)
              at java.beans.Introspector.getDeclaredMethods(Introspector.java:735)
              at java.beans.Introspector.getTargetEventInfo(Introspector.java:444)
              at java.beans.Introspector.getBeanInfo(Introspector.java:200)
              at java.beans.Introspector.getBeanInfo(Introspector.java:102)
              at BeanDumper.dump(BeanDumper.java:10)
              at BeanDumper.main(BeanDumper.java:95)

      It should complain that the class Spots could not be loaded !!!

      ------- BeanDumper.java -------------------

      // A method to introspect a Bean
      import java.beans.*;
      import java.lang.reflect.*;

      public class BeanDumper {
        public static void dump(Class bean){
          BeanInfo bi = null;
          try {
            bi = Introspector.getBeanInfo(
              bean, java.lang.Object.class);
          } catch(IntrospectionException ex) {
            System.out.println("Couldn't introspect " +
              bean.getName());
            System.exit(1);
          }
          PropertyDescriptor properties[] =
            bi.getPropertyDescriptors();
          for(int i = 0; i < properties.length; i++) {
            Class p = properties[i].getPropertyType();
            System.out.println(
              "Property type:\n " + p.getName());
            System.out.println(
              "Property name:\n " +
              properties[i].getName());
            Method readMethod =
              properties[i].getReadMethod();
            if(readMethod != null)
              System.out.println(
                "Read method:\n " +
                readMethod.toString());
            Method writeMethod =
              properties[i].getWriteMethod();
            if(writeMethod != null)
              System.out.println(
                "Write method:\n " +
                writeMethod.toString());
            System.out.println("====================");
          }
          System.out.println("Public methods:");
          MethodDescriptor methods[] =
            bi.getMethodDescriptors();
          for(int i = 0; i < methods.length; i++)
            System.out.println(
              methods[i].getMethod().toString());
          System.out.println("======================");
          System.out.println("Event support:");
          EventSetDescriptor events[] =
            bi.getEventSetDescriptors();
          for(int i = 0; i < events.length; i++) {
            System.out.println("Listener type:\n " +
              events[i].getListenerType().getName());
            Method lm[] =
              events[i].getListenerMethods();
            for(int j = 0; j < lm.length; j++)
              System.out.println(
                "Listener method:\n " +
                lm[j].getName());
            MethodDescriptor lmd[] =
              events[i].getListenerMethodDescriptors();
            for(int j = 0; j < lmd.length; j++)
              System.out.println(
                "Method descriptor:\n " +
                lmd[j].getMethod().toString());
            Method addListener =
              events[i].getAddListenerMethod();
            System.out.println(
                "Add Listener Method:\n " +
              addListener.toString());
            Method removeListener =
              events[i].getRemoveListenerMethod();
            System.out.println(
              "Remove Listener Method:\n " +
              removeListener.toString());
            System.out.println("====================");
          }
        }
        // Dump the class of your choice:
        public static void main(String args[]) {
          if(args.length < 1) {
            System.err.println("usage: \n" +
              "BeanDumper fully.qualified.class");
            System.exit(0);
          }
          Class c = null;
          try {
            c = Class.forName(args[0]);
      if (c == null)
              System.out.println("Class is null");
          } catch(ClassNotFoundException ex) {
            System.err.println(
              "Couldn't find " + args[0]);
            System.exit(0);
          }
          dump(c);
        }
      } ///:~


      --------- frogbean/Frog.java -----------
      package frogbean;
      import java.awt.*;
      import java.awt.event.*;

      class Spots {}

      public class Frog {
        private int jumps;
        private Color color;
        private Spots spots;
        private boolean jmpr;
        public int getJumps() { return jumps; }
        public void setJumps(int newJumps) {
          jumps = newJumps;
        }
        public Color getColor() { return color; }
        public void setColor(Color newColor) {
          color = newColor;
        }
        public Spots getSpots() { return spots; }
        public void setSpots(Spots newSpots) {
          spots = newSpots;
        }
        public boolean isJumper() { return jmpr; }
        public void setJumper(boolean j) { jmpr = j; }
        public void addActionListener(
            ActionListener l) {
          //...
        }
        public void removeActionListener(
            ActionListener l) {
          // ...
        }
        public void addKeyListener(KeyListener l) {
          // ...
        }
        public void removeKeyListener(KeyListener l) {
          // ...
        }
        // An "ordinary" public method:
        public void croak() {
          System.out.println("Ribbet!");
        }
      } ///:~

      (Review ID: 20426)
      ======================================================================

            ghamiltosunw Graham Hamilton (Inactive)
            dgrahamcsunw David Graham-cumming (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: