What is my app getting force close? There is some error with the thread. But i'm not able to figure it out?
<pre><code>public class MainActivity extends Activity {

    private Button Start, Reset, Stop;
    private EditText stop_watch, lblDate, lblTime;

    public MainActivity() {
        init();
    }

    private final UpdateClockThread ucThread = new UpdateClockThread();
    private final StopwatchThread swThread = new StopwatchThread();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Start = (Button)findViewById(R.id.button1);
        Stop = (Button)findViewById(R.id.button3);
        Reset = (Button)findViewById(R.id.button2);
        stop_watch = (EditText)findViewById(R.id.editText3);
        lblTime = (EditText)findViewById(R.id.editText2);
        lblDate = (EditText)findViewById(R.id.editText1);

        Start.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                startactionPerformed();
            }
        });

        Stop.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                stopactionPerformed();
            }
        });

        Reset.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                resetactionPerformed();
            }
        });

    }

    public void init() {
    swThread.setDaemon(true);
    ucThread.setDaemon(true);
    swThread.start();
    ucThread.start();
    }

    /** Listens to the Start/Stop/Resume button. */

    void startactionPerformed() {
        swThread.go();
        //init();
    }

    void stopactionPerformed() {
        swThread.noGo();
    }

    void resetactionPerformed() {
        swThread.reset();
    }

    /** A thread that updates the current date &amp; time. */
    private class UpdateClockThread extends Thread {
    /** The actual work of the thread. */
        public void run() {
            while (true) {
                lblTime.setText("ampm");
                Calendar now = Calendar.getInstance();
                String month = Integer.toString(now.get(Calendar.MONTH)+1);
                String date = Integer.toString(now.get(Calendar.DAY_OF_MONTH));
                String year = Integer.toString(now.get(Calendar.YEAR));
                String hour = Integer.toString(now.get(Calendar.HOUR));
                if (hour.equals("0")) hour = "12";
                String minute = Integer.toString(now.get(Calendar.MINUTE));
                if (minute.length() == 1) minute = "0" + minute;
                String second = Integer.toString(now.get(Calendar.SECOND));
                if (second.length() == 1) second = "0" + second;
                String ampm = now.get(Calendar.AM_PM) == Calendar.AM ? "AM" : "PM";
                lblDate.setText(month + "/" + date + "/" + year);
                lblTime.setText(hour + ":" + minute + ":" + second + " " + ampm);
                try {
                    sleep(500);
                } catch (InterruptedException e) {} 
            }
        }
    }

    /** A thread that keeps track of the stop watch &amp; updates
     * the display accordingly.
    */
    class StopwatchThread extends Thread {
        /** Whether or not stop watch is running. */
        private boolean going = false;
        /** Stores elapsed milliseconds of previous runs. */
        private long prevElapsed = 0;
        /** Stores beginning time of this run. */
        private Date startDate = new Date();

        /** Returns elapsed time in milliseconds.
         *@return The elapsed time
         */
        private long elapsedTime() {
            return prevElapsed + (going ? new Date().getTime() - startDate.getTime() : 0);
        }
        /** Changes the number of elapsed milliseconds into a string.
         *@param time Number of elapsed milliseconds
         *@return The elapsed time as a string.
         */
        private String msToString(long time) {
            String ms, sec, min;
            if (time % 10 &gt;= 5) //round to nearest hundredth
                time += 5;
            ms = Long.toString(time % 1000);
            while (ms.length() &lt; 3)
            ms = "0" + ms;
            ms = ms.substring(0, ms.length() - 1);
            time /= 1000;
            sec = Long.toString(time % 60);
            if (sec.length() == 1) sec = "0" + sec;
            time /= 60;
            min = Long.toString(time);
            return min + ":" + sec + "." + ms;
        }

        /** Called when the stop watch is to go.
         */
        public void go() {
            startDate = new Date();
            going = true;
        }
        /** Called when the stop watch is to stop.
         */
        public void noGo() {
            prevElapsed = elapsedTime();
            going = false;
        }
        /** Resets the stop watch.
         */
        public void reset() {
            going = false;
            prevElapsed = 0;
        }
        /** Adds a lap to the list.
         */

        /** Main code of the thread.
         */
        public void run() {
            while (true) {
                stop_watch.setText(msToString(elapsedTime()));
                yield();
            }
        }
    }
}
</code></pre>

<p>What is my app getting force close? There is some error with the thread. But i'm not able to figure it out?</p>
