Problemas com o set location

estou tendo um problema com as seguintes situações:
primeira:
eu criei um jframe com um botão no meio
e dois botões em baixo

dps eu criei uma thread para fazer o seguinte: fazer um botão de baixo ficar invisivel e botão do meio se mover ate chegar no fim da janela, quando ele chega ao fim o botão que desapareceu deve aparecer e o outro botão de baixo deve desaparecer e o botão do meio deve recuar ate chegar ao fim da janela novamente…
o problema eh que quando eu faço algum botão sumir, o botão do meio volta para a posição que estava inicialmente.

segunda:
eu criei uma thread para criar janelas e chama um metodo para colocá-las no visor de acordo com uma variavel,
o problema eh que dps que esse metodo acaba as janelas voltam para a posição inicial.

alguem pode me ajudar?

Coloca o código ai pra gente…

Desculpe a demora mas aqui esta

public class thread4 extends Thread{
    JButton b1,b2,b3;
    JPanel p;
    /** Creates a new instance of thread4 */
    public thread4(JButton a1,JButton a2,JButton a3,JPanel q) {
        b1=a1;
        b2=a2;
        b3=a3;
        p=q;
        this.start();
    }

    public void run() {
        boolean aux=true;
        b2.setBackground(Color.GREEN);
         b3.setBackground(Color.RED);
         b3.setVisible(false);
         while(true)
         {
             if(aux)
                 b1.setLocation(b1.getLocation().x+3,b1.getLocation().y);
             else
                 b1.setLocation(b1.getLocation().x-3,b1.getLocation().y);
             if(b1.getLocation().x<0)
             {
                 aux=true;
                 b2.setVisible(true);
                 b3.setVisible(false);
         }
             else if(b1.getLocation().x+b1.getWidth()>=p.getWidth())
             {
               aux=false;
                 b2.setVisible(false);
                 b3.setVisible(true);
        }
            try {
                this.sleep(100);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
    }

    
}
}

quando eu debuguei no eclipse eu vi que o erro acontecia quando se executa o comando setVisible(false)…
espero que possam me ajudar…