# JPanel mit Thread in JPanel



## Doltsche (8. Mai 2011)

Hallo zusammen

Ich besitze in meinem Projekt eine JFrame Klasse, welche ein JPanel anzeigt.
Diesem JPanel wird ein zweites JPanel hinzugefügt welches beispielsweise ein Rechteck anzeigt.
Das funktioniert soweit ohne Probleme.
Nun würde ich aber beispielsweise das Rechteck im zweiten JPanel gerne animieren und füge deshalb
einen Thread zum zweiten JPanel hinzu.
Starte ich aber nun diesen Thread im zweiten JPanel (Bsp. im Konstruktor) und führe das Programm aus,
wird nichts angezeigt. 

Wie kann ich dieses Problem vermeiden?

LG Samuel

Edit: Ich hielt den Quellcode in diesem Falle für nebensächlich. Dabei habe ich mich offenbar geirrt.


```
//===============================================
/**
* Das zweite JPanel mit dem Thread
*/
public class MyBean extends JPanel implements Runnable {
    
    //------------------------------------------------------------
    public MyBean() {
        setBorder(BorderFactory.createEtchedBorder());
         
        // Starte Thread
        run();
    }
    
    //------------------------------------------------------------
    /**
    * Zeichne ein Reckteck auf das Panel
    */
    @Override
    public void paintComponent(Graphics g) {        
        super.paintComponents(g);
        g.setColor(Color.RED);
        g.drawRect(20, 20, 10, 10);
    }

    //------------------------------------------------------------
    /**
    * Der Thread
    */
    @Override
    public void run() {
        while(true){
            try {
                repaint();
                Thread.sleep(30);
            } catch (InterruptedException ex) {
                Logger.getLogger(MyBean.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}


//===============================================
/**
* Das Hauptpanel, welchem das zweite Panel übergeben wird.
*/
public class pnlMyWindow extends javax.swing.JPanel {

    //------------------------------------------------------------
    public pnlMyWindow() {
        initComponents();
    }

    //------------------------------------------------------------
    private void initComponents() {

        myBean = new Bean.MyBean();

        javax.swing.GroupLayout myBeanLayout = new javax.swing.GroupLayout(myBean);
        myBean.setLayout(myBeanLayout);
        myBeanLayout.setHorizontalGroup(
            myBeanLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 96, Short.MAX_VALUE)
        );
        myBeanLayout.setVerticalGroup(
            myBeanLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 96, Short.MAX_VALUE)
        );

        // ... (auto generated methode) 
    }
}

//===============================================
public class Window extends JFrame{
    
    private JFrame frame = null;
    
    //------------------------------------------------------------
    public Window(){
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    //------------------------------------------------------------
    /** 
    /*Dieser Methode wird beim Programmstart eine Instanz der Klasse pnlMyWindow übergeben
    */
    public void setPanel(JPanel panel, String title){
        frame.setTitle(title);
        frame.getContentPane().removeAll(); // clear
        frame.getContentPane().add(panel); // set
        frame.pack();   // fit to panel (adjust size)
        frame.setVisible(true); // show
    }
}
```


----------



## Fu3L (8. Mai 2011)

Ich bringe mal den Standardspruch: Ohne einen Quelltext werden wir wahrscheinlich nicht helfen können^^


----------



## Doltsche (8. Mai 2011)

Hallo Fu3L

Danke für deinen Hinweis.
Den Code habe ich entsprechend hinzugefügt.


----------



## Fu3L (8. Mai 2011)

Ersetze den Aufruf von run() in deinem Konstruktor mal durch dashier:


```
Thread t = new Thread(this);
t.start();
```

So wird ein Thread gestartet


----------



## Doltsche (8. Mai 2011)

Danke für den Tipp.
Nun funktioniert es wunderbar .


----------

