title: Thread.join() not working
body: <p>This is the comple java class (GFXSurface). Inside this class, a second class is defined, </p>
  
  <pre><code>public class GFXSurface extends Activity implements OnTouchListener {
  
      AnotherSurface ourSurfaceView;
      float x, y;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          // TODO Auto-generated method stub
          super.onCreate(savedInstanceState);
          ourSurfaceView = new AnotherSurface(this);
          ourSurfaceView.setOnTouchListener(this);
          x = 0;
          y = 0;
          setContentView(ourSurfaceView);
      }
      @Override
      protected void onPause() {
          // TODO Auto-generated method stub
          super.onPause();
          ourSurfaceView.ourPause();
      }
      @Override
      protected void onResume() {
          // TODO Auto-generated method stub
          super.onResume();
          ourSurfaceView.ourResume();
      }
      @Override
      public boolean onTouch(View v, MotionEvent event) {
          // TODO Auto-generated method stub
          x = event.getX();
          y = event.getY();
          return true;  
      }
  
      /*------------------------Class within a class-------------------------------*/
  
      public class AnotherSurface extends SurfaceView implements Runnable {
  
          SurfaceHolder ourHolder;
          Thread ourThread = null;
          boolean isRunning;
  
          public AnotherSurface(Context context) {
              // TODO Auto-generated constructor stub
              super(context); //not auto-generated; set it up manually
              isRunning = false;
              ourHolder = getHolder();    
          }
  
          public void ourPause(){
              isRunning = false;
              while(true){
                  try {
                      ourThread.join();
                  } catch (InterruptedException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
                  break;
              }
              ourThread = null;
          }
  
          public void ourResume(){
              isRunning = true;
              ourThread = new Thread(this);
              ourThread.start();
          }
  
          @Override
          public void run() {
              // TODO Auto-generated method stub
              while(true){
                  if(!ourHolder.getSurface().isValid())
                      continue;
  
                  Canvas canvas = ourHolder.lockCanvas();
                  canvas.drawRGB(255, 0, 0);
                  if(x!=0 &amp;&amp; y!=0){
                      Bitmap ourBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.green_ball);
                      canvas.drawBitmap(ourBitmap, x-(ourBitmap.getWidth()/2), y-(ourBitmap.getHeight()/2), null);
                  }
                  ourHolder.unlockCanvasAndPost(canvas);
              }
          }
      }
  }
  </code></pre>
  
  <p>Now, when I start the activity, it works as is required, it creates a bitmap at the place where the screen is clicked (centered at the point of click). The problem it gives is that, when I press the back key on my phone, the app stops responding and the phone gives an option to force shut the app. I think the it has got to do something with the "ourThread" thread not being joined properly. </p>
  
  <p>Any idea where the problem lies?  Thanks.
  <hr>
  <strong>EDIT:</strong> I have actually found where I was going wrong. In the while loop:</p>
  
  <pre><code>while(true){
          if(!ourHolder.getSurface().isValid())
              continue;
  
          Canvas canvas = ourHolder.lockCanvas();
          canvas.drawRGB(255, 0, 0);
          if(x!=0 &amp;&amp; y!=0){
              Bitmap ourBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.green_ball);
              canvas.drawBitmap(ourBitmap, x-(ourBitmap.getWidth()/2), y-(ourBitmap.getHeight()/2), null);
          }
  </code></pre>
  
  <p>I just changed "true" to "isRunning". And now the thread does end, and thus, the activity closes on pressing the back button. Thanks all for your valuable suggestions.</p>