I know exactly what is going on. You're making an infinite loop. How? Read on.
When you call .start() in a Thread, the run() method happens. So if you wanted to make a thread to print out foo, fifty times, you would do this:
private class FooPrint implements Runnable
public void run()
for (int i = 0; i < 50; i++)
and you would call it like this:
Thread thread = new Thread(new FooPrint());
The way you are doing it creates an infinite loop, because your run method calls the start() method which calls the run() method which calls the start() method etc. etc. etc.
A StackOverflow is generally caused by infinite loop, which is just the case right here.
Instead of saying thread.start() in your run() method, remember that start() always happens before
run(), and your run method contols everything... so just change that line to whatever you want to happen in your thread.
Also, your code definitely needs some other work too. You generally would not make a new thread to pause an animation, for example. Rather, you would use a new thread to do something like the opposite – perhaps move an animation at the same time something else is moving it without modifying the main game loop. To pause an animation just pause your game loop, or don't call the paint() method for that amount of pause time.
Where are you calling paint? The whole structure of your class could use some work. Instead of making the entire class the thread, make a private class that only has the run method in it. This makes everything less confusing and I guarantee you will have less problems.
Hope that all made sense.