title: java.lang.RuntimeException: Unable to start activity ComponentInfo cannot be cast to android.widget.ZoomControls
body: <p>I'm new to android development, hope you all can help me. I got this androidVNC viewer source code from internet. When i'm running the androidVNC application in the emulator, it will exit automatically then i get following errors in LogCat. Can anyone one help me? Thanks.</p>
  
  <pre><code>FATAL EXCEPTION: main
  java.lang.RuntimeException: Unable to start activity ComponentInfo{android.androidVNC/android.androidVNC.VncCanvasActivity}:       java.lang.ClassCastException: com.antlersoft.android.zoomer.ZoomControls cannot be cast to     android.widget.ZoomControls
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
  at android.app.ActivityThread.access$600(ActivityThread.java:122)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:137)
  at android.app.ActivityThread.main(ActivityThread.java:4340)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:511)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
  at dalvik.system.NativeStart.main(Native Method)
  Caused by: java.lang.ClassCastException: com.antlersoft.android.zoomer.ZoomControls       cannot be cast to android.widget.ZoomControls
  at android.androidVNC.VncCanvasActivity.onCreate(VncCanvasActivity.java:585)
  at android.app.Activity.performCreate(Activity.java:4465)
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
  ... 11 more
  </code></pre>
  
  <p>This is the ZoomControls java file:</p>
  
  <pre><code>package com.antlersoft.android.zoomer;
  
  import android.content.Context;
  import android.util.AttributeSet;
  import android.view.LayoutInflater;
  import android.view.MotionEvent;
  import android.view.View;
  import android.view.animation.AlphaAnimation;
  import android.widget.ImageButton;
  import android.widget.LinearLayout;
  import android.widget.ZoomButton;
  
  
  public class ZoomControls extends LinearLayout {
  
  private final ZoomButton mZoomIn;
  private final ZoomButton mZoomOut;
  private final ImageButton mZoomKeyboard;
  
  public ZoomControls(Context context) {
      this(context, null);
  }
  
  public ZoomControls(Context context, AttributeSet attrs) {
      super(context, attrs);
      setFocusable(false);
  
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      inflater.inflate(R.layout.zoom_controls, this, // we are the parent
              true);
  
      mZoomIn = (ZoomButton) findViewById(R.id.zoomIn);
      mZoomOut = (ZoomButton) findViewById(R.id.zoomOut);
      mZoomKeyboard = (ImageButton) findViewById(R.id.zoomKeys);
  }
  
  public void setOnZoomInClickListener(OnClickListener listener) {
      mZoomIn.setOnClickListener(listener);
  }
  
  public void setOnZoomOutClickListener(OnClickListener listener) {
      mZoomOut.setOnClickListener(listener);
  }
  
  public void setOnZoomKeyboardClickListener(OnClickListener listener) {
      mZoomKeyboard.setOnClickListener(listener);
  }
  
  /*
   * Sets how fast you get zoom events when the user holds down the
   * zoom in/out buttons.
   */
  public void setZoomSpeed(long speed) {
      mZoomIn.setZoomSpeed(speed);
      mZoomOut.setZoomSpeed(speed);
  }
  
  @Override
  public boolean onTouchEvent(MotionEvent event) {
  
      /* Consume all touch events so they don't get dispatched to the view
       * beneath this view.
       */
      return true;
  }
  
  public void show() {
      fade(View.VISIBLE, 0.0f, 1.0f);
  }
  
  public void hide() {
      fade(View.GONE, 1.0f, 0.0f);
  }
  
  private void fade(int visibility, float startAlpha, float endAlpha) {
      AlphaAnimation anim = new AlphaAnimation(startAlpha, endAlpha);
      anim.setDuration(500);
      startAnimation(anim);
      setVisibility(visibility);
  }
  
  public void setIsZoomInEnabled(boolean isEnabled) {
      mZoomIn.setEnabled(isEnabled);
  }
  
  public void setIsZoomOutEnabled(boolean isEnabled) {
      mZoomOut.setEnabled(isEnabled);
  }
  
  @Override
  public boolean hasFocus() {
      return mZoomIn.hasFocus() || mZoomOut.hasFocus();
  }
  </code></pre>
  
  <p>}</p>
  
  <p>This is the zoom_controls XML file:</p>
  
  <pre><code>&lt;merge xmlns:android="http://schemas.android.com/apk/res/android"&gt;
  &lt;ZoomButton android:id="@+id/zoomOut" 
      android:background="@drawable/btn_zoom_down" 
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      /&gt;
  &lt;ImageButton android:id="@+id/zoomKeys"
      android:background="@android:drawable/ic_dialog_dialer"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      /&gt;
  &lt;ZoomButton android:id="@+id/zoomIn" 
      android:background="@drawable/btn_zoom_up"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      /&gt;
  &lt;/merge&gt;
  </code></pre>