Error bei addView

daxsn

Mitglied
Moin,

ich fange gerade an ein wenig JAVA zu programmieren. Ich habe vorher AS2, AS3, JavaScript und PHP programmiert.

Nun habe ich mit einem Spiel begonnen.

Bei diesem werden Grafiken von Fischen auf die Spielfläche per addView gepackt. Das KLappt auch ohne Probleme. Wenn ich nun jedoch versuch das gleiche mit einer anderen Grafik zu machen wird das Programm beendet:

Java:
    	ImageView welle = new ImageView(this);
	welle.setImageResource(R.drawable.icon);
    	spielbereich.addView(welle); // WENN ICH DAS HIER AUSKOMMENTIERE GIBT ES KEINE FEHLER

Ich habe schon bei google gesucht, aber ich komme nicht drauf. Über eure Hilfe wäre ich euch sehr dankbar.

Hier jetzt nochmal mein ganzer Code (nur falls ihn jemand braucht) und die Log Fehler:

Java:
package de.projekte.fischerboot;


import java.util.Date;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;

public class GameActivity extends Activity implements Runnable,OnClickListener {
	private static final int INTERVALL = 10;
	private static final int ZEITSCHEIBEN = 300;
	private Handler handler = new Handler();
	private int runde;
	private int punkte;
	private int fische;
	private int gefangeneFische;
	private int zeit;
	private float massstab;
	private FrameLayout spielbereich;
	private Random zufallsgenerator = new Random();
	private Random zufallsfischgenerator = new Random();
	private static final long HOECHSTALTER_MS=5000;
	private static final String FISCH1 = "fisch1";
	private static final String FISCH2 = "fisch2";
	private static final String FISCH3 = "fisch3";
	private static final String FISCH4 = "fisch4";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game);
        spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
    	massstab=getResources().getDisplayMetrics().density;
        spielStarten();
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
        	@Override
        	public void run() {
        		zeit=zeit-1;
        	}
        }, 1000, 1000);
    }
    private void spielStarten(){
    	runde=0;
    	punkte=0;
    	ImageView welle = new ImageView(this);
	welle.setImageResource(R.drawable.icon);
    	spielbereich.addView(welle); // WENN ICH DAS HIER AUSKOMMENTIERE GIBT ES KEINE FEHLER
    	starteRunde();
    }
    private void starteRunde(){
    	runde=runde+1;
    	fische=runde*10;
    	gefangeneFische=0;
    	zeit=60;
    	FrameLayout flZeit=(FrameLayout)findViewById(R.id.bar_time);
    	flZeit.setBackgroundResource(R.color.weiss); 
    	FrameLayout flTreffer=(FrameLayout)findViewById(R.id.bar_hits);
    	flTreffer.setBackgroundResource(R.color.weiss);
    	bildschirmAktualisieren();
        handler.postDelayed(this,INTERVALL);
    }
    private void bildschirmAktualisieren(){
		if(gefangeneFische<fische){
	    	FrameLayout flTreffer=(FrameLayout)findViewById(R.id.bar_hits);
	    	flTreffer.setBackgroundResource(R.color.weiss);
		} else {
	    	FrameLayout flTreffer=(FrameLayout)findViewById(R.id.bar_hits);
	    	flTreffer.setBackgroundResource(R.color.gruen);
		}
		//TEXTFELDER
		TextView tvPunkte = (TextView)findViewById(R.id.points);
		tvPunkte.setText("PUNKTE: "+Integer.toString(punkte));
		TextView tvRunde = (TextView)findViewById(R.id.round);
		tvRunde.setText("RUNDE: "+Integer.toString(runde));
		TextView tvHits = (TextView)findViewById(R.id.hits);
		tvHits.setText(Integer.toString(gefangeneFische));
		TextView tvTime = (TextView)findViewById(R.id.time);
		tvTime.setText(Integer.toString(zeit));
		//BALKEN
		FrameLayout flTreffer=(FrameLayout)findViewById(R.id.bar_hits);
		FrameLayout flZeit=(FrameLayout)findViewById(R.id.bar_time);
		LayoutParams lpTreffer=flTreffer.getLayoutParams();
		lpTreffer.width=Math.round(massstab*300*Math.min(gefangeneFische,fische)/fische);
		LayoutParams lpZeit=flZeit.getLayoutParams();
		lpZeit.width=Math.round(massstab*zeit*300/60);
	}
	private void zeitHerunterzaehlen(){  	
    	if(zeit<11){
        	FrameLayout flZeit=(FrameLayout)findViewById(R.id.bar_time);
        	flZeit.setBackgroundResource(R.color.rot);    		
    	} else {
        	FrameLayout flZeit=(FrameLayout)findViewById(R.id.bar_time);
        	flZeit.setBackgroundResource(R.color.weiss);    		
    	}
    	float zufallszahl=zufallsgenerator.nextFloat();
    	double wahrscheinlichkeit=fische*1.5/ZEITSCHEIBEN;
    	if(wahrscheinlichkeit>1){
    		einenFischAnzeigen();
    		if(zufallszahl<wahrscheinlichkeit-1){
    			einenFischAnzeigen();
    		}
    	} else {
    		if(zufallszahl<wahrscheinlichkeit){
    			einenFischAnzeigen();
    		}
    	}
    	fischeVerschwinden();
    	fischeBewegen();
    	bildschirmAktualisieren();
    	if(!pruefeSpielende()){
      		if(!pruefeRundenende()) {
      			handler.postDelayed(this, INTERVALL);
      		}
    	}
    	
    }
    private boolean pruefeSpielende(){
    	if(zeit==0 && gefangeneFische<fische){
    		gameOver();
    		return true;
    	} else {
    		return false;
    	}
    }
    private boolean pruefeRundenende(){
    	if(zeit==0){
    		starteRunde();
    		return true;
    	} else {
    		return false;
    	}
    }
    private void fischeBewegen(){ 
    	spielbereich = (FrameLayout) findViewById(R.id.spielbereich);    	
    	int nummer=0;
    	while(nummer<spielbereich.getChildCount()) {
    		ImageView fisch = (ImageView) spielbereich.getChildAt(nummer);
    		int vy = (Integer) fisch.getTag(R.id.vy);
    			vy=vy-1;
    			if(vy<=0){
    				if(fisch.getTag(R.id.fischart)==FISCH1){
        				fisch.setImageResource(R.drawable.fisch1_runter);
    				} else if(fisch.getTag(R.id.fischart)==FISCH2){
        				fisch.setImageResource(R.drawable.fisch2_runter);
    				} else if(fisch.getTag(R.id.fischart)==FISCH3){
        				fisch.setImageResource(R.drawable.fisch3_runter);
    				} else if(fisch.getTag(R.id.fischart)==FISCH4){
        				fisch.setImageResource(R.drawable.fisch4_runter);
    				}
    			}
    		
    		fisch.setTag(R.id.vy, new Integer(vy));
        	FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) fisch.getLayoutParams();
    		params.topMargin -= vy*runde;
    		fisch.setLayoutParams(params);    		
	    	nummer++;    		
    	}
    }
    private void einenFischAnzeigen() {
    	int breite=spielbereich.getWidth();
    	int hoehe=spielbereich.getHeight();
    	float zufallsfisch=zufallsfischgenerator.nextFloat();
    	ImageView fisch = new ImageView(this);
    	if(zufallsfisch<=0.25){
    		fisch.setImageResource(R.drawable.fisch1_hoch);
    		fisch.setTag(R.id.fischart, FISCH1);
    	} else if(zufallsfisch<=0.5){
    		fisch.setImageResource(R.drawable.fisch2_hoch);
    		fisch.setTag(R.id.fischart, FISCH2);
    	} else if(zufallsfisch<=0.75){
    		fisch.setImageResource(R.drawable.fisch3_hoch);
    		fisch.setTag(R.id.fischart, FISCH3);
    	} else {
    		fisch.setImageResource(R.drawable.fisch4_hoch);
    		fisch.setTag(R.id.fischart, FISCH4);
    	}
    	fisch.setTag(R.id.geburtsdatum, new Date());
    	fisch.setOnClickListener(this);
    	int fisch_breite = (int)Math.round(massstab*50);
		int fisch_hoehe = (int)Math.round(massstab*55);
    	int links = zufallsgenerator.nextInt(breite-fisch_breite);
    	int oben = hoehe-fisch_hoehe;
		int vy;
		do {
			vy = zufallsgenerator.nextInt(3)+14;
		} while(vy==0);
		vy = (int)Math.round(massstab*vy);		
		
		fisch.setTag(R.id.vy, new Integer(vy));
		
    	FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(fisch_breite,fisch_hoehe);
		params.leftMargin = links;
		params.topMargin = oben;
    	params.gravity= Gravity.TOP + Gravity.LEFT;
    	spielbereich.addView(fisch,params);
    	  	
    }
    private void fischeVerschwinden() {
    	spielbereich = (FrameLayout) findViewById(R.id.spielbereich);    	
    	int nummer=0;
    	while(nummer<spielbereich.getChildCount()) {
    		ImageView fisch = (ImageView) spielbereich.getChildAt(nummer);
    		Date geburtsdatum = (Date) fisch.getTag(R.id.geburtsdatum);
    		long alter = (new Date()).getTime() - geburtsdatum.getTime();
    		if(alter > HOECHSTALTER_MS) {
    			spielbereich.removeView(fisch);
			} else { 
	    		nummer++;
    		}
    	}
    }
	@Override
	public void onClick(View fisch) {
		gefangeneFische++;
		if(fisch.getTag(R.id.fischart)==FISCH1){
			punkte+=10;
		} else if(fisch.getTag(R.id.fischart)==FISCH2){
			punkte+=20;
		} else if(fisch.getTag(R.id.fischart)==FISCH3){
			punkte+=40;
		} else if(fisch.getTag(R.id.fischart)==FISCH4){
			punkte+=80;
		}		
		bildschirmAktualisieren();
		spielbereich.removeView(fisch);
	}
	@Override
	public void run() {
		zeitHerunterzaehlen();
	}
	private void gameOver() {		
		Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
		dialog.setContentView(R.layout.gameover);
		dialog.show();
		
	}
    

}


Code:
01-11 17:13:29.593: D/AndroidRuntime(277): Shutting down VM
01-11 17:13:29.593: W/dalvikvm(277): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
01-11 17:13:29.603: E/AndroidRuntime(277): FATAL EXCEPTION: main
01-11 17:13:29.603: E/AndroidRuntime(277): java.lang.NullPointerException
01-11 17:13:29.603: E/AndroidRuntime(277): 	at de.projekte.fischerboot.GameActivity.fischeVerschwinden(GameActivity.java:216)
01-11 17:13:29.603: E/AndroidRuntime(277): 	at de.projekte.fischerboot.GameActivity.zeitHerunterzaehlen(GameActivity.java:119)
01-11 17:13:29.603: E/AndroidRuntime(277): 	at de.projekte.fischerboot.GameActivity.run(GameActivity.java:241)
01-11 17:13:29.603: E/AndroidRuntime(277): 	at android.os.Handler.handleCallback(Handler.java:587)
01-11 17:13:29.603: E/AndroidRuntime(277): 	at android.os.Handler.dispatchMessage(Handler.java:92)
01-11 17:13:29.603: E/AndroidRuntime(277): 	at android.os.Looper.loop(Looper.java:123)
01-11 17:13:29.603: E/AndroidRuntime(277): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
01-11 17:13:29.603: E/AndroidRuntime(277): 	at java.lang.reflect.Method.invokeNative(Native Method)
01-11 17:13:29.603: E/AndroidRuntime(277): 	at java.lang.reflect.Method.invoke(Method.java:521)
01-11 17:13:29.603: E/AndroidRuntime(277): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-11 17:13:29.603: E/AndroidRuntime(277): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-11 17:13:29.603: E/AndroidRuntime(277): 	at dalvik.system.NativeStart.main(Native Method)
 

Bernd Hohmann

Top Contributor
Der Fehler liegt in Zeile 215

Java:
 Date geburtsdatum = (Date) fisch.getTag(R.id.geburtsdatum);
, da wird das "fisch.getTag(...)" NULL zurückliefern (anscheinend wird der Fisch nicht gefunden) und daher stirbt er in 216 mit einer NPE.

Bernd
 

daxsn

Mitglied
Weil welle ja auch ein child auf spielbereich ist, richtig? Und das hat natürlich keine id namens geburtsdatum.

Kann ich denn soetwas wie
Java:
if(fisch.getTag(R.id.geburtsdatum)){
...
}
dazwischenschieben? Dann müsste es doch theoretisch klappen, richtig? (Bin erst wieder Montag am PC um es auszuprobieren und bevor ich dann nochmal fragen muss...)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
monsterherz error: <identifier> expected Java Basics - Anfänger-Themen 2
R Compiler-Fehler identifier error? Java Basics - Anfänger-Themen 3
N Compiler-Fehler Not a statement Error Java Basics - Anfänger-Themen 7
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
richrich99 error: illegal start of expression Java Basics - Anfänger-Themen 10
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
N Compiler-Fehler State Machine - Compiler Error Java Basics - Anfänger-Themen 48
U Interface als PAramter (Vergleich) und ein Error Java Basics - Anfänger-Themen 9
FHEFHJHFJH error: class names, 'summe_bsp', are only accepted if annotation processing is explicitly requested Java Basics - Anfänger-Themen 3
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
P Eclipse Karate Framework API Test . Unexpected Error: the trustAnchors parameter must be non-empty Java Basics - Anfänger-Themen 1
H Versteht jemand diesen Codewars Error? Java Basics - Anfänger-Themen 8
J Fehlermeldung: A JNI error Java Basics - Anfänger-Themen 3
Gaudimagspam Compiler Error Java Basics - Anfänger-Themen 3
Eule25 Arbeit mit long und int, Error: integer number too large Java Basics - Anfänger-Themen 2
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
B Methoden if-statement error, FX, Fehlermeldung Java Basics - Anfänger-Themen 6
K Error bei meinem Programm - Hilfe Java Basics - Anfänger-Themen 8
A Scanner-Error Java Basics - Anfänger-Themen 8
Elyt Error: incompatible types Java Basics - Anfänger-Themen 3
I Client ObjectInputStream error... Java Basics - Anfänger-Themen 5
Kirby.exe Alle möglichen Error Möglichkeiten abfangen Java Basics - Anfänger-Themen 33
C error: <identifier> expected Java Basics - Anfänger-Themen 13
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
N Methoden Unerklärliche Error Meldung Java Basics - Anfänger-Themen 3
ZH1896ZH Datentypen Error bei For-Schleife Java Basics - Anfänger-Themen 2
R Error, wenn mehrere Clients gleichzeitig die Verbindung beenden Java Basics - Anfänger-Themen 16
Z Klassen Error: ';' expected - was mache ich falsch? Java Basics - Anfänger-Themen 4
9 Error bei .split() Java Basics - Anfänger-Themen 2
L Operatoren error: bad operand types for binary operator && Java Basics - Anfänger-Themen 8
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
F Erste Schritte error: cannot find symbol Java Basics - Anfänger-Themen 5
L SQLITE - Syntax error Java Basics - Anfänger-Themen 3
R else without if error Java Basics - Anfänger-Themen 5
A Objekt in Methode zurückgeben, JUnit zeigt Error Java Basics - Anfänger-Themen 2
F Ausdruck wirft unerwarteten Error Java Basics - Anfänger-Themen 2
T Unverständlicher Launch-Error Java Basics - Anfänger-Themen 11
L Bluej Error: Cannot find Symbol Java Basics - Anfänger-Themen 13
R java.lang.ArrayIndexOutOfBoundsException: 0 Rechner Error Java Basics - Anfänger-Themen 4
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
T Error: int cannot be dereferenced Java Basics - Anfänger-Themen 10
D Datentypen Datentyperstellung | Kompiler sagt Syntax Error doch ich find keine Lösung Java Basics - Anfänger-Themen 2
J Syntax error on token ";",, expected Java Basics - Anfänger-Themen 2
W double*double error Java Basics - Anfänger-Themen 4
C Compiler-Fehler No such Field error Java Basics - Anfänger-Themen 20
B Linux - Error: Could not find or load main class application.Main Java Basics - Anfänger-Themen 28
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
C Erste Schritte Syntax Error Java Basics - Anfänger-Themen 23
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
H Compiler-Fehler error not a statement Java Basics - Anfänger-Themen 2
N Error bei eingabe eines Punktes Java Basics - Anfänger-Themen 1
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
TheMenox Error bei Scanner - woher? Java Basics - Anfänger-Themen 14
D Compiler-Fehler error: .class expected Java Basics - Anfänger-Themen 2
Chr1s Interpreter-Fehler Error Fehlercode Java Basics - Anfänger-Themen 7
D Bitte um Hilfe bei "error: package com.apple.eawt does not exist import com.apple.eawt.*;" Java Basics - Anfänger-Themen 1
J Error: cannot find symbol - variable Java Basics - Anfänger-Themen 3
S Compiler-Fehler error: ';' expected (finde Fehler nicht) Java Basics - Anfänger-Themen 10
D Erste Schritte Fehlermeldung "Syntax error on token ";", { expected after this token" Java Basics - Anfänger-Themen 13
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
1 Bei if-Anweisung: Syntax error on token Java Basics - Anfänger-Themen 5
D Übung Felder java Error kompilieren Java Basics - Anfänger-Themen 4
Joew0815 Error org.apache.xmlrpc.client.XmlRpcClientConfigImpl.setUserAgent Java Basics - Anfänger-Themen 2
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
C Exception Error Java Basics - Anfänger-Themen 15
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
B Not a statement error Java Basics - Anfänger-Themen 2
D error: cannot find symbol Java Basics - Anfänger-Themen 3
B Frage zu Beispielprogramm: "error: cannot find symbol" Java Basics - Anfänger-Themen 2
F java Ip ping + Dateiausgabe error ! Java Basics - Anfänger-Themen 3
O Exception Error Java Basics - Anfänger-Themen 3
BlueMountain Erste Schritte error: cannot find symbol Java Basics - Anfänger-Themen 2
B Printf führt zu Error. Java Basics - Anfänger-Themen 8
P Fatal Error [...] librxtxSerial.so Java Basics - Anfänger-Themen 2
D error: Class names, >>>HILFE, anfänger<<< Java Basics - Anfänger-Themen 4
L Error: Cannot find symbol Java Basics - Anfänger-Themen 1
A Taschenrechner zeigt Error Java Basics - Anfänger-Themen 7
B Compiler-Fehler 86:11: error: ';' expected obwohl kein ";" hingehört! Java Basics - Anfänger-Themen 10
K Java-Editor: "Starten" bringt Error Java Basics - Anfänger-Themen 15
N Error "unreachable Code" Java Basics - Anfänger-Themen 7
A error: incompatible types Java Basics - Anfänger-Themen 9
T If ; else error on system token delete Java Basics - Anfänger-Themen 5
B Error vs Runtime exception Java Basics - Anfänger-Themen 4
W Variablen While-Error Java Basics - Anfänger-Themen 6
N Operatoren JSpinner und + Error Java Basics - Anfänger-Themen 21
M Java Arbeitsspeicherverbrauch, Heap Space error korrigieren? Java Basics - Anfänger-Themen 18
M Syntax error on token ";", { expected after this token Java Basics - Anfänger-Themen 3
J Variablen Invalid Character - Error -> Spiel mit Variablenergebnissen Java Basics - Anfänger-Themen 8
K Erste Schritte eclipse syntax error token Java Basics - Anfänger-Themen 5
vandread String.split("\\") führt zu Error?! Java Basics - Anfänger-Themen 8
G Fehlermeldung: A fatal error has been detected by the Java Runtime Environment Java Basics - Anfänger-Themen 7
B Compiler-Fehler import java.io.*; führt zu error Java Basics - Anfänger-Themen 2
S Syntax Error - source level Java Basics - Anfänger-Themen 12
L bean error bei glassfish deploy Java Basics - Anfänger-Themen 2
B Syntax error Java Basics - Anfänger-Themen 6
K Error: java.lang.NoSuchMethodException Java Basics - Anfänger-Themen 2
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben