How to add a TransformGroup to another live one?

I do like this:
// scene---- BranchGroup , is live
// objScale— TransformGroup, is live

u.getLocale().removeBranchGraph(scene);
objScale.removeChild(objScale.numChildren()-1);
objScale.addChild(g);
u.getLocale().addBranchGraph(scene);

I call this code when I move the mouse. At first it is ok , but after sereval times , there is error:

Exception occurred during Behavior initialization:

java.lang.NullPointerException

  at javax.media.j3d.WakeupCriterion.cleanTree(WakeupCriterion.java:74)

  at javax.media.j3d.WakeupOr.cleanTree(WakeupOr.java:73)

  at javax.media.j3d.BehaviorRetained.wakeupOn(BehaviorRetained.java:312)

  at javax.media.j3d.Behavior.wakeupOn(Behavior.java:221)

  at com.sun.j3d.utils.behaviors.mouse.MouseBehavior.initialize(MouseBehavior.java:201)

  at com.sun.j3d.utils.behaviors.mouse.MouseRotate.initialize(MouseRotate.java:137)

  at javax.media.j3d.BehaviorRetained.executeInitialize(BehaviorRetained.java:290)

  at javax.media.j3d.Locale.doAddBranchGraph(Locale.java:204)

  at javax.media.j3d.Locale.addBranchGraph(Locale.java:163)

  at best.Applet1.drawlineD(Applet1.java:8880)

  at best.Applet1.lineMoved(Applet1.java:3619)

Please tell me whether my method of adding a TransformGroup to another live TransformGroup is right. Or how to add a TransformGroup into another live ? Thanks!

I feel that the exception you get reveils a bug in Java3D, but generally its not a very good idea to leave the live state for a simple scenegraph change.

Better wrap you TG into a BranchGroup, that can be added/removed into a life graph.

could you tell me how to wrap? thanks!

//**********************************************************************************************
//            (C) Copyright 2002 by Dipl. Phys. Joerg Plewe, HARDCODE Development
//            All rights reserved. Copying, modification,
//            distribution or publication without the prior written
//            consent of the author is prohibited.
//
//      Created on 30. March 2002, 18:52
//**********************************************************************************************
package de.hardcode.threed.objects;

import javax.media.j3d.BranchGroup;
import javax.media.j3d.Group;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.Node;

/**
 * A group representing an object movable in space.
 * In spite of a simple TransfoormGroup, I am a BranchGroup so that I am
 * allowed to be added and removed from life scenegraphs.
 *
 * @author  Herkules
 */
public class ObjectGroup extends BranchGroup
{

      protected final TransformGroup mTransformGroup = new TransformGroup();

      /**
       * Ctor for derived classes that doesn't require a node.
       */
      protected ObjectGroup()
      {
            this.setBoundsAutoCompute( false );
      }
      
      /**
       * Creates a new instance of ObjectGroup.
       */
      public ObjectGroup( Node obj )
      {
            this.setBoundsAutoCompute( false );
            setNode( obj );
      }
      
      
      protected final void setNode( Node obj )
      {
            this.setCapability( BranchGroup.ALLOW_DETACH );
            this.setCapability( BranchGroup.ALLOW_CHILDREN_READ );
            
            mTransformGroup.addChild( obj );
            mTransformGroup.setCapability( TransformGroup.ALLOW_TRANSFORM_READ );
            mTransformGroup.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE );
            mTransformGroup.setCapability( TransformGroup.ALLOW_CHILDREN_EXTEND );
            mTransformGroup.setCapability( TransformGroup.ALLOW_CHILDREN_READ );
            mTransformGroup.setCapability( TransformGroup.ALLOW_CHILDREN_WRITE );
            mTransformGroup.setCapability( TransformGroup.ALLOW_BOUNDS_READ );
            
            this.addChild( mTransformGroup );
      }
      
      /**
       * Retrieve the transform part of this object.
       */
      public final TransformGroup getTransformGroup()
      {
            return mTransformGroup;
      }
      
      
      /**
       * Attach some data recursivly to the objects model in order to re-indentify it from
       * 3D data (e.g. picks/collisions)
       */
      public final void setUserData( Object userdata )
      {
            setUserDataDeep( mTransformGroup, userdata );
      }
      
      /**
       * Helper: recurse trough the scenegraph and attach data to each group.
       */
      private static final void setUserDataDeep( Group group, Object userdata )
      {
            
            group.setUserData( userdata );
            for( int c=0; c<group.numChildren(); ++c )
            {
                  if( group.getChild(c) instanceof Group )
                  {
                        setUserDataDeep( (Group)group.getChild(c), userdata );
                  }
                  else
                  {
                        group.getChild(c).setUserData( userdata );
                  }
            }
      }
      
}