I am developping a little game using Java. I have a main JFrame for my application that can create another Window (the game window) by clicking on a JButton. I have already teste my game window alone and everything is ok.
Here is my game window constructor:
public GameWindow(final GameController controller)
{
    super("Boulder Dash Game");
    this.controller = controller;
    this.controller.registerObserver(getCurrentFrame()); 
    this.gamePanel = new GamePanel(controller);
    this.frameWidth = controller.getColumns() * 16;
    this.frameHeight = controller.getRows() * 16 + 76;
    getContentPane().add(gamePanel, BorderLayout.CENTER);
    setSize(frameWidth, frameHeight);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    controller.startGame();
}
The controller.startGame() method start the game loop. The game loop work fine when I start this window directly from my main.
Now, I want to launch this GameWindow frame from my main frame. Here is a code from my main frame:
playButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(final @Nullable ActionEvent e)
    {
        String selectedItem = (String) levelsComboBox.getSelectedItem();
        assert selectedItem != null;
        controller.lauchGame(selectedItem);
    }
});
The controller.launchGame(String selectedItem) is a method used to load a game level and to start the gamewindow. Here is the code
public void lauchGame(final String levelQueried)
{
    assert levelQueried != null;
    Level level = LevelRepository.load(levelQueried);
    assert level != null;
    GameController controller = new GameController(model);
    GameWindow view = new GameWindow(controller);
}
My problem is that when I start the GameWindow from the other JFrame, I don't have any elements on it. If I don't start the game loop in the constructor, my gamewindows seems to be initialised correctly (content, EXIT ON CLOSE action...). But when I start the gameloop, I juste have an empty JFrame (correctly sized) with no content.. And when I try to quit the frame, I can't...
here is the code of my game loop:
public void start() throws InterruptedException // Game loop method
{
    boolean updateGame = true;
    while ( !isFinish() ) {
        // We update the elements only 1 round of 2
        if ( updateGame ) {
            updateExitState();
            getPlayField().updateMoovableEntities();
            updateGame = false;
        } else {
            updateGame = true;
        }
        Thread.sleep(100);
        // Animate the sprite at every round
        setChanged(); 
        notifyObservers(); // inform that a repaint is necessary
    }
    LOGGER.debug("The game loop for the current level is now finished.");
}
On the console, I can see that the gameloop is playing and the update method is correctly called... But the paintComponent is never called... so there is nothing on my frame !
I don't have any Idea about the problem... Can someone help me please ?
edit:
Thank you for you answers. I have modified the constructor of my GameWindow using
javax.swing.SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run()
    {
        controller.startGame();
    }
});
It is a bit better, now my frame is correctly initialised. But now there is another problem, the listeners are no longer available... I can not interact at all with my frame (can't exit, or do any other action...). What's wrong ?
 
     
     
    