Weird 'blur' when making / firing particles

So here’s how my particle system works;



I run a separate thread for each type of particle. That thread populates an ArrayList<ParticleMesh>. When I try to cast a spell, my game will create the respective Spell(extends Node) object, which consists of a source, target, and ParticleMesh.  I move the spell (Node holding particle mesh) to the location of the caster, then I grab one of the particle meshes out of the array list and attach it to the spell. Then the spell updates geometric state as it likes until it hits it’s target.



However, when I cast a spell, I see really large, wide blue lines (blue is the color of the spell) that fly across the screen, from the origin to the caster. It’s seen a little bit here (watch in HD). If you look closely, when I fire a spell off the lines go across the screen.



Clearly this is not OK and I am wondering how to eliminate it. Thanks!

I thought I should mention that this only happens when I create the ParticleMesh objects and put them in the cache. If I create them spontaneously when I cast the spell, I don't see this problem.



Some sample code:



I call this when I cast a spell:

Fireball fball1 = new Fireball(inGameRef.getSelectedCharacter(), inGameRef.getRogue());
inGameRef.getRoot().attachChild(fball1);



Fireball constructor calls:

public Fireball(Actor myCaster, Actor myTarget)
{
        setLocalTranslation(myCaster.getLocalTranslation().clone());
        mySpell = SpellUtils.getFireball();
        attachChild(mySpell);

        TextureState ts = DisplaySystem.getDisplaySystem().getRenderer().createTextureState();
        try {
            ts.setTexture(TextureManager.loadTexture(new File("textures/spells/flaresmall.jpg").toURL(), Texture.MinificationFilter.Trilinear, Texture.MagnificationFilter.Bilinear));
        } catch (MalformedURLException ex) {
            Logger.getLogger(SpellUtils.class.getName()).log(Level.SEVERE, null, ex);
        }
        ts.setEnabled(true);
        mySpell.updateGeometricState(0, true);
        mySpell.setRenderState(ts);
        mySpell.updateRenderState();

        setRenderState(SpellUtils.getTransparencyState());
        updateRenderState();

        this.myTarget = myTarget;
        myDestination = myTarget.getLocalTranslation();
        updateGeometricState(0, true);
    }



Which gets the mesh from:

public static ParticleMesh getFireball()
    {
        if(fireBallCache.size() > 0)
            return fireBallCache.remove(0);
        else
        {
            return makeFireball();
        }
    }



Which spawns meshes like this:

while(true)
        {
            try {
                if (storage.size() < capacity) {
                    storage.add(SpellUtils.makeFireball());
                }
                this.sleep(50);
            } catch (InterruptedException ex) {
                Logger.getLogger(FrostballRefreshThread.class.getName()).log(Level.SEVERE, null, ex);
            }
        }



I've worked on this for 2 hours straight and can't get it. Thanks for tolerating me :)