IluTov
IluTov

Reputation: 6862

Infinite loop in a JPanel

I want to program a simple Snake. Therefore I have programmed a custom JPanel, which can hold a Scene. A Scene just draws something, and you can thread it with the public void run() method, so it implements Runnable.

Now, when I initialise the Scene, I create a Thread of the instance.

if (this.getThread() == null) {
    Thread sceneThread = new Thread(this);
    this.setThread(sceneThread);
    this.getThread().run();
} else {
    System.err.println("Scene is already running");
}

And the scene finally begins to be executed in a separate thread:

// Run thread
public void run () {
    try {
        while (true) {
            this.update();
            this.getGamePanel().sceneShouldRepaint();

            Thread.sleep(this.getFps());
        }
    }
    catch (Exception e) {
        System.err.println(e);
    }
}

Somehow this is blocking the windows thread. It does not appear anymore.

Can anyone tell me why?

Upvotes: 0

Views: 219

Answers (1)

Sebastian
Sebastian

Reputation: 8005

You are not starting the thread but directly invoke its run method, thus you are blocking the event thread itself in an endless loop - try starting it by calling start() instead.

Plus be sure to read about multithreading in Swing applications as pointed out by Qwerky.

Upvotes: 3

Related Questions