2016-04-27 6 views
-1

Testen eines Sprite-Code, den ich die folgende Fehlermeldung aufzurufen:Null poiner Exception ein Toolbar.getTitle()

FATAL EXCEPTION: main 
                  Process: marti.sprite1app, PID: 2149 
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{marti.sprite1app/marti.sprite1app.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference 
                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                   at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                   at android.os.Looper.loop(Looper.java:135) 
                   at android.app.ActivityThread.main(ActivityThread.java:5254) 
                   at java.lang.reflect.Method.invoke(Native Method) 
                   at java.lang.reflect.Method.invoke(Method.java:372) 
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
                  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference 
                   at android.support.v7.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:98) 
                   at android.support.v7.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:91) 
                   at android.support.v7.app.ToolbarActionBar.<init>(ToolbarActionBar.java:73) 
                   at android.support.v7.app.AppCompatDelegateImplV7.setSupportActionBar(AppCompatDelegateImplV7.java:205) 
                   at android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:99) 
                   at marti.sprite1app.MainActivity.onCreate(MainActivity.java:19) 
                   at android.app.Activity.performCreate(Activity.java:5990) 
                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  
                   at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
                   at android.os.Handler.dispatchMessage(Handler.java:102)  
                   at android.os.Looper.loop(Looper.java:135)  
                   at android.app.ActivityThread.main(ActivityThread.java:5254)  
                   at java.lang.reflect.Method.invoke(Native Method)  

Ich versuche, ein Sprite zu zeigen und sie auf dem Bildschirm angezeigt werden, um die Ansicht zu ändern die Klasse "vistaPrincipalJuego". Sorry für das Englisch ist nicht sehr gut.

MainActivity:

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(new VistaPrincipalJuego(this)); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

}

Thema Subprocess:

public class SubprocesoPrincipal extends Thread { 

private boolean finJuego; 
private SurfaceHolder surfaceHolder; 
private VistaPrincipalJuego vistaJuego; 

public SubprocesoPrincipal (SurfaceHolder surfaceHolder, VistaPrincipalJuego vista) { 

    super(); 

    this.surfaceHolder = surfaceHolder; 
    this.vistaJuego = vista; 

} 

public void setFinJuego(boolean fj) { 

    this.finJuego = fj; 

} 

public void run() { 

    Canvas lienzo = null; 

    while (!finJuego) { 

     try { 

      lienzo = this.surfaceHolder.lockCanvas(); 

      synchronized (surfaceHolder) { 

       this.vistaJuego.draw(lienzo); 
      } 

     } finally { 

      if (lienzo != null) { 

       surfaceHolder.unlockCanvasAndPost(lienzo); 

      } 
     } 

    } 

} 

}

Klasse erweitert Surface:

public class VistaPrincipalJuego extends SurfaceView implements SurfaceHolder.Callback { 

private SubprocesoPrincipal buclePrincipal; 

public VistaPrincipalJuego(Context context) { 

    super(context); 

    buclePrincipal = new SubprocesoPrincipal(getHolder(), this); 

    getHolder().addCallback(this); 

    setFocusable(true); 

} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 

    this.buclePrincipal.setFinJuego(false); 
    this.buclePrincipal.start(); 

} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 

    boolean repite = true; 

    while (repite) { 

     try { 

      buclePrincipal.join(); 
      repite = false; 

     } catch (InterruptedException e) { 

     } 

    } 


} 

public boolean onTouchEvent(MotionEvent event) { 

    if (event.getAction() == MotionEvent.ACTION_DOWN) { 

     if (event.getY() > getHeight() - 50) { 

      buclePrincipal.setFinJuego(true); 
      ((Activity) getContext()).finish(); 

     } 

    } 

    return super.onTouchEvent(event); 

} 

protected void onDraw(Canvas lienzo) { 

    lienzo.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.mario), 10, 10, null); 

} 

}

+1

http://stackoverflow.com/questions/29393169/setsupportactionbar-throws-nullpointer-exception –

+0

Stellen Sie sicher, dass Sie importieren android.support.v7.widget.Toolbar nicht anders in MainActivity ..... – sushildlh

Antwort

0

einfache Entscheidung - versuchen, diese alle Codebeispiel zu löschen:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    });