Well done! Thats not an easy project.
One bug I noticed still outstanding
new Thread(this).stop();
creates a new Thread and stops it (null op because it was never started)
If you want to stop the threads you started earlier you need to keep track of them, eg
Thread thead1 = new Thread(myRunnable);
thread1.start();
...
thread1.stop();
(Thread.stop is deprecated, but if you are doing it as part of a shutdown then you should be OK.)