2014-03-31 62 views
0
java.lang.RuntimeException: 
Unable to start  activity ComponentInfo{org.example.screens/edu.dongthang.controller.Controller}: 
java.lang.NullPointerException 

幫幫我吧,我當預類代碼嘗試公開課「控制器」採取這種錯誤了java.lang.RuntimeException:無法啓動活動ComponentInfo {}:顯示java.lang.NullPointerException

public void clickHandler(View view) { 
    AppDelegate appDel = ((AppDelegate) getApplicationContext()); 
    appDel.mouse_sensitivity = Math.round(50/20) + 1; 
    if (!appDel.connected) { 
     String serverIp; 
     int serverPort; 

     serverIp = ipField.getText().toString();  
     serverPort = Integer.parseInt(portField.getText().toString()); 
     appDel.createClientThread(serverIp, serverPort); 
    } 

    int x; 
    for (x = 0; x < 4; x++) {// every quarter second for one second check if 
           // the server is reachable 
     if (appDel.connected) { 
      startActivity(new Intent(view.getContext(), Controller.class)); 
      x = 6; 
     } 
     try { 
      Thread.sleep(250); 
     } catch (Exception e) { 
     } 
    } 

    if (!appDel.connected) 
     if (!appDel.network_reachable) 
      network_alert.show(); 
     else 
      alert.show(); 
} 

並且這是類控制器 package edu.dongthang.controller;

public class Controller extends Activity implements OnTouchListener, 
    OnKeyListener, SimpleGestureListener{ 

int lastXpos = 0; 
int lastYpos = 0; 
static boolean mousemode = false; 
boolean keyboard = false; 
Thread checking; 
SimpleGestureFilter detect; 
String delim = new String("!!"); 
ImageView sstmouse; 

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_control); 

    detect = new SimpleGestureFilter(this, this); 

    sstmouse = (ImageView)findViewById(R.id.stt_mouse); 

    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth(); 

    Button left = (Button) findViewById(R.id.LeftClickButton); 
    Button right = (Button) findViewById(R.id.RightClickButton); 

    left.setWidth(width/2); 
    right.setWidth(width/2); 

    View touchView = (View) findViewById(R.id.TouchPad); 
    touchView.setOnTouchListener(this); 
} 

public void onStart() { 
    super.onStart(); 

    AppDelegate appDel = ((AppDelegate) getApplicationContext()); 
    sendToAppDel(new String("Mouse Sensitivity!!"+ appDel.mouse_sensitivity)); 

    new Thread(new Runnable() { 
     AppDelegate appDel = ((AppDelegate) getApplicationContext()); 

     public void run() { 
      while (appDel.connected) { 
       try { 
        Thread.sleep(1000); 
       } catch (Exception e) { 
       } 
       ; 
       if (!appDel.connected) { 
        finish(); 
       } 
      } 
     } 
    }).start(); 
} 

// detect touch events 
// and pass them to mousePadHandler method 
@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if(mousemode == false){ 
     mousePadHandler(event); 
    } 
    return true; 
} 
// detect keyboard event 
// and send to delegate 
@Override 
public boolean onKey(View v, int c, KeyEvent event) { 
    Log.d("ello", "" + event.getKeyCode()); 
    AppDelegate appDel = ((AppDelegate) getApplicationContext()); 

    appDel.sendMessage("S_KEY" + delim + event.getKeyCode()); 
    return false; 
} 

// send message to AppDelegate class 
// to be sent to server on client desktop 
private void sendToAppDel(String message) { 
    AppDelegate appDel = ((AppDelegate) getApplicationContext()); 
    if (appDel.connected) { 
     appDel.sendMessage(message); 
    } else { 
     finish(); 
    } 
} 

// send a mouse message 
private void mousePadHandler(MotionEvent event) { 
    StringBuilder sb = new StringBuilder(); 

    int action = event.getAction(); 
    int touchCount = event.getPointerCount(); 

    // if a single touch 
    // send movement based on action 
    if (touchCount == 1) { 
     switch (action) { 
     case 0: 
      sb.append("DOWN" + delim); 
      sb.append((int) event.getX() + delim); 
      sb.append((int) event.getY() + delim); 
      break; 

     case 1: 
      sb.append("UP" + delim); 
      sb.append(event.getDownTime() + delim); 
      sb.append(event.getEventTime()); 
      break; 

     case 2: 
      sb.append("MOVE" + delim); 
      sb.append((int) event.getX() + delim); 
      sb.append((int) event.getY()); 
      break; 

     default: 
      break; 
     } 
    } 

    // if two touches 
    // send scroll message 
    // based off MAC osx multi touch 
    // scrolls up and down 
    else if (touchCount == 2) { 
     sb.append("SCROLL" + delim); 
     if (action == 2) { 
      sb.append("MOVE" + delim); 
      sb.append((int) event.getX() + delim); 
      sb.append((int) event.getY()); 
     } else 
      sb.append("DOWN"); 
    } 

    sendToAppDel(sb.toString()); 
} 

public void LeftButtonClickHandler(View v) { 
    Log.d("eloo", "CLICKED"); 
    sendToAppDel("CLICK" + delim + "LEFT"); 
} 

public void RightButtonClickHandler(View v) { 
    sendToAppDel("CLICK" + delim + "RIGHT"); 
} 

@Override 
public boolean dispatchTouchEvent(MotionEvent me) { 
    // Call onTouchEvent of SimpleGestureFilter class 
    this.detect.onTouchEvent(me); 
    return super.dispatchTouchEvent(me); 
} 

@Override 
public void onSwipe(int direction) { 

    String str = ""; 

    switch (direction) { 
    case SimpleGestureFilter.SWIPE_RIGHT: 
     if (mousemode == true) { 
      str = "Swipe Right"; 
      sendToAppDel("CLICK" + delim + "RIGHT"); 
      //vibra.vibrate(1000); 
     } 
     break; 

    case SimpleGestureFilter.SWIPE_LEFT: 
     if (mousemode == true) { 
      str = "Swipe Left"; 
      sendToAppDel("CLICK" + delim + "LEFT"); 
      //vibra.vibrate(1000); 
     } 
     break; 
    } 
    Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onDoubleTap() { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "double tap 111 ", Toast.LENGTH_SHORT).show(); 
    sendToAppDel("MOUSE" + delim + "LEFT"); 
    //vibra.vibrate(1000); 
} 

@Override 
public void onLongPress() { 
    // TODO Auto-generated method stub 
    if(mousemode == false){ 
     mousemode = true; 
     //Toast.makeText(this, "control mode", Toast.LENGTH_SHORT).show(); 
     sstmouse.setImageResource(R.drawable.control_icon); 
     //vibra.vibrate(1000); 
    }else{ 
     mousemode = false; 
     //Toast.makeText(this, "mouse mode", Toast.LENGTH_SHORT).show(); 
     sstmouse.setImageResource(R.drawable.hand_icon); 
     //vibra.vibrate(1000); 
    } 
} 

public void clickBack(View view){ 

} 

public void clickEsc(View view){ 
    sendToAppDel("CLICK" + delim + "ESC"); 
} 

public void clickF5(View view){ 
    sendToAppDel("CLICK" + delim + "F5"); 
} 

public void clickNote(View view){ 

} 

public void clickMenu(View view){ 

} 
} 

我認爲錯誤是在控制器類的地方,但我能找到它, 請幫助我。 感謝

+0

發佈您的AndroidManifest.xml代碼。可能你忘了在清單中包含活動名稱。 – fida1989

+0

請加上整個日誌 –

+0

是的。請發佈您的AndroidManifest.xml。這個錯誤很平常。 –

回答

1

堆棧跟蹤將是有益的,但是對於異常的原因是你的代碼是創建在活動的onCreate()方法,這將導致方法過早退出NullPointerException,留下未創建活動,因此RuntimeException: Unable to start activity

解決方法:調試您的onCreate()代碼,查看您對意外的null執行操作的位置,並對它進行更優雅的處理。

可能的元兇:

left.setWidth(width/2); // left = null 

right.setWidth(width/2); // right = null 

touchView.setOnTouchListener(this); // touchView = null 

對不起,無法更精確的w/o堆棧跟蹤。

+0

我被檢查是否左,右或touchView = null,所以它不工作:( – user2028608

+0

最好繼續進行實際的調試。也許這個問題+答案在這方面會有所幫助:http://stackoverflow.com/questions/8551818 /如何對調試機器人應用線逐線使用-蝕 – Saran

相關問題