App startet nicht mehr Fatal Exception

  • Antworten:95
André
  • Forum-Beiträge: 53

01.03.2014, 14:58:53 via Website

LogCat: Ich komme noch in das Hauptmenü wenn ich allerdings auf Play drücke kommt:

Sorry!
The application Lazydragon (process com.crazy.lazydragon) has stopped unexpectedly. Please try again.


103-01 13:52:06.160: W/dalvikvm(362): threadid=9: thread exiting with uncaught exception (group=0x40015560)
203-01 13:52:06.180: E/AndroidRuntime(362): FATAL EXCEPTION: Thread-11
303-01 13:52:06.180: E/AndroidRuntime(362): java.lang.NullPointerException
403-01 13:52:06.180: E/AndroidRuntime(362): at com.crazy.lazydragon.GameLoopThread.run(GameLoopThread.java:32)
503-01 13:52:52.761: I/Process(362): Sending signal. PID: 362 SIG: 9

Wo liegt der Fehler? Hilfe wäre nett

Vor geschätzten 5minuten ging das Spiel noch

— geändert am 01.03.2014, 15:00:04

Antworten
André
  • Forum-Beiträge: 53

01.03.2014, 15:02:43 via Website

Der Exit Button reagiert auch nicht mehr

Antworten
Michele
  • Forum-Beiträge: 1.525

01.03.2014, 15:20:41 via Website

Hallo.

Magst du uns deinen Code mal zeigen.


Wie du siehst in der LogCat kommt die Fehlermeldung:
103-01 13:52:06.180: E/AndroidRuntime(362): java.lang.NullPointerException


LG

Antworten
André
  • Forum-Beiträge: 53

01.03.2014, 15:23:37 via Website

den kompletten?

Antworten
Michele
  • Forum-Beiträge: 1.525

01.03.2014, 15:24:53 via Website

Wohl da wo deine Button´s sind und der Fehler auftreten sollte?


LG

Antworten
André
  • Forum-Beiträge: 53

01.03.2014, 15:26:49 via Website

das ist die MenuActivity:

1package com.crazy.lazydragon;
2
3import android.app.Activity;
4import android.content.Intent;
5import android.content.SharedPreferences;
6import android.os.Bundle;
7import android.view.View;
8import android.view.View.OnClickListener;
9import android.widget.Button;
10import android.widget.TextView;
11
12public class MenuActivity extends Activity implements OnClickListener {
13
14 Button bPlay, bExit;
15 TextView tvHighscore2;
16 private TextView tvHighscore;
17
18
19 @Override
20 protected void onCreate(Bundle savedInstanceState) {
21 super.onCreate(savedInstanceState);
22 setContentView(R.layout.menu);
23 initialize();
24 }
25
26 @Override
27 public void onClick(View v) {
28 switch (v.getId()) {
29 case R.id.bPlay:
30 Intent newGameScreen= new Intent(getApplicationContext(), MainActivity.class);
31 startActivity(newGameScreen);
32 this.finish();
33 break;
34 case R.id.bExit:
35 this.finish();
36 break;
37 }
38}
39 public void initialize(){
40 bPlay = (Button) findViewById(R.id.bPlay);
41 bPlay.setOnClickListener(this);
42 bExit = (Button) findViewById(R.id.bExit2);
43 bExit.setOnClickListener(this);
44 tvHighscore = (TextView) findViewById(R.id.tvHighscore2);
45 tvHighscore.setText("Highscore: " + Integer.toString(readHighscore()));
46 }
47 public int readHighscore() {
48 SharedPreferences pref = getSharedPreferences("GAME", 0);
49 return pref.getInt("HIGHSCORE", 0);
50 }
51
52}

Im Game Loop Thread zeigt er ja auch irgendeinen Fehler an

GameLoopThread:


1package com.crazy.lazydragon;
2
3import android.annotation.SuppressLint;
4import android.graphics.Canvas;
5import android.view.SurfaceHolder.Callback;
6
7public class GameLoopThread extends Thread {
8 static final long FPS = 20;
9 private GameView theView;
10 private boolean isRunning = false;
11
12 public GameLoopThread(Callback callback) {
13 this.theView = (GameView) callback;
14 }
15
16 public GameLoopThread(GameView gameView) {
17 // TODO Auto-generated constructor stub
18 }
19
20 public void setRunning(boolean run) {
21 isRunning = run;
22 }
23
24 public void run() {
25 long TPS = 1000 / FPS;
26 long startTime, sleepTime;
27 while (isRunning) {
28 Canvas theCanvas = null;
29 startTime = System.currentTimeMillis();
30 try {
31 theCanvas = theView.getHolder().lockCanvas();
32 synchronized (theView.getHolder()) {
33 theView.draw(theCanvas);
34 }
35 } finally {
36 if (theCanvas != null) {
37 theView.getHolder().unlockCanvasAndPost(theCanvas);
38 }
39 }
40 sleepTime = TPS - (System.currentTimeMillis() - startTime);
41 try {
42 if (sleepTime > 0)
43 sleep(sleepTime);
44 else
45 sleep(10);
46 } catch (Exception e) {
47
48 }
49 }
50 }
51}

— geändert am 01.03.2014, 15:33:28

Antworten
Michele
  • Forum-Beiträge: 1.525

01.03.2014, 15:36:34 via Website

Packe das:
1public void initialize() {
2
3 bPlay = (Button) findViewById(R.id.bPlay);
4 bPlay.setOnClickListener(this);
5 bExit = (Button) findViewById(R.id.bExit2);
6 bExit.setOnClickListener(this);
7 tvHighscore = (TextView) findViewById(R.id.tvHighscore2);
8 tvHighscore.setText("Highscore: " + Integer.toString(readHighscore()));
9}

Lieber in die onCreate, anstatt in eine Extra Methode.


LG

Antworten
André
  • Forum-Beiträge: 53

01.03.2014, 15:40:23 via Website

Hab ich jetzt gemacht ändert sich aber nichts

Antworten
Michele
  • Forum-Beiträge: 1.525

01.03.2014, 15:42:18 via Website

Jap dachte ich mir.

Hast ja erst später deine 2te Klasse hinzugefügt.

In der GameLoopThread Klasse ist in der run(); Methode ein Fehler :D


LG

Antworten
impjor
  • Forum-Beiträge: 1.793

01.03.2014, 15:43:23 via App

André

1java.lang.NullPointerException
203-01 13:52:06.180: E/AndroidRuntime(362): at com.crazy.lazydragon.GameLoopThread.run(GameLoopThread.java:32)
Die Zeile bitte ansehen, alles andere ist unwichtig.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
André
  • Forum-Beiträge: 53

01.03.2014, 15:44:53 via Website

wisst ihr auch was da der Fehler ist?

Antworten
impjor
  • Forum-Beiträge: 1.793

01.03.2014, 15:45:30 via App

Ach, ich glaube ich seh es schon: Du hast einen leeren Konstruktor, der macht keinen Sinn. Alles was keinen Sinn hat kann man löschen. Dann sollte dir sogar Eclipse/Android Studio sagen, was falsch läuft.
Der andere Konstruktor ist bisschen seltsam... Bist du sicher, dass du das Callback in eine GameView casten kannst?

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Michele
  • Forum-Beiträge: 1.525

01.03.2014, 15:47:31 via Website

impjor
Ach, ich glaube ich seh es schon: Du hast einen leeren Konstruktor, der macht keinen Sinn. Alles was keinen Sinn hat kann man löschen. Dann sollte dir sogar Eclipse/Android Studio sagen, was falsch läuft.
Der andere Konstruktor ist bisschen seltsam... Bist du sicher, dass du das Callback in eine GameView casten kannst?

LG

Ich brauche immer länger als andere fehler zu finden :D
Bin dadrin noch nicht so gut in fremden Codes einen Fehler zu finden.
Aber wo du es nun sagst, würde ich das gleiche auch sagen.


LG

Antworten
André
  • Forum-Beiträge: 53

01.03.2014, 15:50:16 via Website

Ich verbau mir glaub ich grade immer mehr..
komme gerade nicht mehr mit klar..

Wenn ich den Konstruktor entferne kommen andere Errors?

Wegen Callback das ist meine GameView..

1package com.crazy.lazydragon;
2
3import java.util.ArrayList;
4import java.util.List;
5import java.util.Random;
6
7import android.annotation.SuppressLint;
8import android.content.Context;
9import android.graphics.Bitmap;
10import android.graphics.BitmapFactory;
11import android.graphics.Canvas;
12import android.graphics.Color;
13import android.graphics.Paint;
14import android.graphics.RectF;
15import android.graphics.Typeface;
16import android.view.MotionEvent;
17import android.view.SurfaceHolder;
18import android.view.SurfaceHolder.Callback;
19import android.view.SurfaceView;
20
21public class GameView extends SurfaceView {
22 private List<Sprite> spriteList = new ArrayList<Sprite>();
23 private List<Integer> spriteListNum = new ArrayList<Integer>();
24 private SurfaceHolder surfaceHolder;
25 private Bitmap bmp;
26 private Bitmap livesPicture;
27 private GameLoopThread theGameLoopThread;
28 private boolean createSprites = true;
29 private long lastClick;
30 private int currentColorNum;
31 private int lives = 4;
32 private int score = 0;
33 private Paint paintRed, paintBlue, paintGreen, paintYellow;
34 private Paint currentColor;
35 private String scoreString;
36 private String livesString;
37 private float density;
38 private MainActivity theGameActivity = new MainActivity();
39 private boolean transparency = false;
40
41 public GameView(Context context) {
42 super(context);
43 livesPicture = BitmapFactory.decodeResource(getResources(),
44 R.drawable.lives1);
45 Random rnd = new Random();
46 theGameActivity = (MainActivity) context;
47 setColors();
48 currentColorNum = rnd.nextInt(4);
49 theGameLoopThread = new GameLoopThread(this);
50 surfaceHolder = getHolder();
51 surfaceHolder.addCallback(new SurfaceHolder.Callback() {
52
53 public void surfaceDestroyed(SurfaceHolder holder) {
54 theGameLoopThread.setRunning(false);
55 boolean retry = true;
56 while (retry) {
57 try {
58 theGameLoopThread.interrupt();
59 theGameLoopThread.join();
60 retry = false;
61 } catch (InterruptedException e) {
62 }
63 }
64
65 }
66
67 public void surfaceCreated(SurfaceHolder holder) {
68 theGameLoopThread.setRunning(true);
69 if (theGameLoopThread.getState() == theGameLoopThread
70 .getState().NEW) {
71 theGameLoopThread.start();
72 }
73 }
74
75 public void surfaceChanged(SurfaceHolder holder, int format,
76 int width, int height) {
77 }
78 });
79 }
80
81 @SuppressLint("WrongCall")
82 @Override
83 public void draw(Canvas canvas) {
84 canvas.drawColor(Color.DKGRAY);
85 if (createSprites == true) {
86 initialSprites();
87 }
88 for (Sprite sprite : spriteList) {
89 sprite.onDraw(canvas);
90 }
91 if (currentColorNum == 0) {
92 drawLines(paintBlue, canvas);
93 } else if (currentColorNum == 1) {
94 drawLines(paintRed, canvas);
95 } else if (currentColorNum == 2) {
96 drawLines(paintGreen, canvas);
97 } else if (currentColorNum == 3) {
98 drawLines(paintYellow, canvas);
99 }
100 final int fontSize = (int) (25 * density);
101 int yTextPos = (int) (25 * density);
102 Typeface font = Typeface.create("Arial", Typeface.NORMAL);
103
104 Paint paint = new Paint();
105 paint.setColor(Color.WHITE);
106 paint.setTypeface(font);
107 paint.setTextSize(fontSize);
108 paint.setAntiAlias(true);
109 scoreString = String.valueOf(score);
110 int x = (canvas.getWidth() * 5 / 7);
111 final String text = "Score: " + scoreString;
112 canvas.drawText(text, x, yTextPos, paint);
113 drawLives(canvas, paint);
114
115 }
116
117 private void createSprite(int index) {
118 Bitmap bmp = null;
119 switch (index) {
120 case 0:
121 bmp = BitmapFactory.decodeResource(getResources(),
122 R.drawable.alienspriteblue);
123 break;
124 case 1:
125 bmp = BitmapFactory.decodeResource(getResources(),
126 R.drawable.alienspritered);
127 break;
128 case 2:
129 bmp = BitmapFactory.decodeResource(getResources(),
130 R.drawable.alienspritegreen);
131 break;
132 case 3:
133 bmp = BitmapFactory.decodeResource(getResources(),
134 R.drawable.alienspriteyellow1);
135 break;
136 }
137 Sprite sprite = new Sprite((Callback) this, bmp);
138 spriteList.add(sprite);
139 spriteListNum.add(index);
140 }
141
142 private void initialSprites() {
143 for (int i = 0; i < 4; i++) {
144 for (int j = 0; j < 3; j++)
145 createSprite(i);
146 }
147 createSprites = false;
148 }
149
150 private void rndCreateSprite() {
151 Random rnd = new Random(System.currentTimeMillis());
152 int i = rnd.nextInt(4);
153 createSprite(i);
154 }
155
156 @Override
157 public boolean onTouchEvent(MotionEvent event) {
158 if (System.currentTimeMillis() - lastClick > 300) {
159 lastClick = System.currentTimeMillis();
160 synchronized (getHolder()) {
161 for (int i = spriteList.size() - 1; i >= 0; i--) {
162 Sprite sprite = spriteList.get(i);
163 if (sprite.isTouched(event.getX(), event.getY())) {
164 if (currentColorNum == spriteListNum.get(i)) {
165 score++;
166 } else {
167 lives--;
168 if (lives == 0) {
169 theGameActivity.onGameOver();
170 }
171 }
172 if (score == 3)
173 lives++;
174 rndCreateSprite();
175 removeSprite(i);
176 changeColor();
177 break;
178 }
179 }
180 }
181 }
182 return true;
183 }
184
185 private void removeSprite(int index) {
186 spriteList.remove(index);
187 spriteListNum.remove(index);
188 }
189
190 public void setColors() {
191 Paint paintRed = new Paint();
192 paintRed.setARGB(255, 236, 27, 36);
193 this.paintRed = paintRed;
194 Paint paintBlue = new Paint();
195 paintBlue.setARGB(255, 36, 72, 204);
196 this.paintBlue = paintBlue;
197 Paint paintGreen = new Paint();
198 paintGreen.setARGB(255, 34, 177, 76);
199 this.paintGreen = paintGreen;
200 Paint paintYellow = new Paint();
201 paintYellow.setARGB(255, 255, 242, 0);
202 this.paintYellow = paintYellow;
203 }
204
205 public void drawLines(Paint lineColor, Canvas canvas) {
206 int lineWidth = (int) (10 * density);
207 int screenHeight = getHeight();
208 int screenWidth = getWidth();
209 canvas.drawRect(0, 0, lineWidth, getHeight(), lineColor);
210 canvas.drawRect(0, getHeight() - lineWidth, screenWidth, screenHeight,
211 lineColor);
212 canvas.drawRect(screenWidth - lineWidth, 0, screenWidth, screenHeight,
213 lineColor);
214 currentColor = lineColor;
215 }
216
217 public void changeColor() {
218 Random rnd = new Random();
219 int index = rnd.nextInt(spriteListNum.size());
220 this.currentColorNum = spriteListNum.get(index);
221 switch (index) {
222 case 0:
223 currentColor = paintBlue;
224 break;
225 case 1:
226 currentColor = paintRed;
227 break;
228 case 2:
229 currentColor = paintGreen;
230 break;
231 case 3:
232 currentColor = paintYellow;
233 break;
234 }
235
236 }

— geändert am 01.03.2014, 15:51:12

Antworten
André
  • Forum-Beiträge: 53

01.03.2014, 15:56:26 via Website

Wenn ich es über Debug laufen lasse komm nur ein Schwarzer Bildschirm, wenn ich allerdings auf die Zurücktaste drücke erscheint das Pause Menü.
Wenn ich im Pause Menü auf Exit klicke schließt er die App wie gewollt.
Wenn ich auf continue drücke ist der Bildschirm wieder einfach nur schwarz.

Und Über Run:
kommt wieder Error und das Spiel öffnet nicht..

— geändert am 01.03.2014, 16:07:48

Antworten
impjor
  • Forum-Beiträge: 1.793

01.03.2014, 16:07:38 via App

Deine GameView erbt von SurfaceView. Du versuchst im Konstruktor nun aber einen SurfaveView.Callback in ein GameView zu casten. Das funktioniert nimmer! Also den Konstruktor ganz weg lassen.
Du hast eine NullPointerException bekommen, hast du dir die Zeile mal angesehen? (Wir konnten das dank fehlender Importe nicht.) Ich schätze mal, dass theView null war. Wo wird denn theView ein Wert zu gewiesen? Nirgendwo.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
André
  • Forum-Beiträge: 53

01.03.2014, 16:15:57 via Website

Kannst du mir die Fehler vielleicht markieren? was jetzt weg muss ? und die NullPointerException das sagt er das:

Was muss ich denn jetzt machen? die Fehler sind noch immer die selben

Hab die GameView und alles aber von hier :

http://panjutorials.de/tutorial-28-den-dialog-anzeigen-lassen-onbackpressed/

Vorhin ging doch noch alles.. nur das Pause Menü ging nicht und jetzt geht das Pause Menü und alles andere nicht mehr?!

— geändert am 01.03.2014, 17:06:43

Antworten
impjor
  • Forum-Beiträge: 1.793

01.03.2014, 17:06:47 via App

Wenn in der Zeile nur eine Klammer steht, ist das LogCat nicht aktuell. Also LogCat löschen und nochmal neu die App crashen lassen.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
André
  • Forum-Beiträge: 53

01.03.2014, 17:13:41 via Website

Das ist alles im LogCat

103-01 16:11:24.574: E/AndroidRuntime(333): FATAL EXCEPTION: Thread-11
203-01 16:11:24.574: E/AndroidRuntime(333): java.lang.NullPointerException
303-01 16:11:24.574: E/AndroidRuntime(333): at com.crazy.lazydragon.GameLoopThread.run(GameLoopThread.java:31)

Antworten
impjor
  • Forum-Beiträge: 1.793

01.03.2014, 17:32:16 via App

Ja, hast du dir Zeile 31 angesehen? Entweder theView ist null, oder theView.getHolder ist null.

Siehe auch meine vorherigen Beiträge.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
André
  • Forum-Beiträge: 53

01.03.2014, 17:38:29 via Website

Ja TheView get holder steht da und was ist da der Fehler?

— geändert am 01.03.2014, 23:51:38

Antworten
André
  • Forum-Beiträge: 53

01.03.2014, 23:51:07 via Website

Ja hab ich natürlich nur ich weiß nich genau welche Zeilen jetzt weg müssen oder was ich mit dem getHolder machen soll.. Sorry falls ich nerve aber kenn mich noch nicht so gut aus..8o

hab immernoch nix verändert also immernoch diese Fehler..:sleep:

Sorry..

— geändert am 01.03.2014, 23:52:32

Antworten
impjor
  • Forum-Beiträge: 1.793

02.03.2014, 00:36:48 via App

Ich frage mich, wie du diesen ganzen Code hinbekommen hast, wenn dir so ein Fehler soche Probleme bereitet.....(ok, ich habe da so Vermutungen...)

impjor
Entweder theView ist null, oder theView.getHolder ist null.
Das würde ich mal klären, was genau da jetzt null ist.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
André
  • Forum-Beiträge: 53

02.03.2014, 00:48:06 via Website

Habe die Tutorials von Panjutorials versucht bin jetz bei Tutorial 27 c.a.. da steht doch getholder ist null aber warum ist das falsch?

danke dir aber schonmal, dass du mir versuchst zu helfen:)

— geändert am 02.03.2014, 00:55:03

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.03.2014, 01:31:58 via App

Getholder ist halt null und das ist falsch weil du mit einer null Variable nicht arbeiten kannst..

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
André
  • Forum-Beiträge: 53

02.03.2014, 01:36:33 via Website

Oh also muss ich das entfernen? ist das der Grund warum mein Spiel nicht mehr Angezeigt wird?

Antworten
Michele
  • Forum-Beiträge: 1.525

02.03.2014, 01:58:27 via Website

Hallo.

impjor hat dir doch alles wichtigste gesagt.:D

Ich kenne das Panjutorials selbst von damals. Und du sollst es nicht nur abschreiben oder Copy&Paste machen sondern auch verstehen was du
da genau tust oder es tut.

Und wie es aussieht verstehst du nichts was impjor meint.

Lies und gehe das nochmal genauer durch. Dann findest du den Fehler.:D


LG

Antworten
André
  • Forum-Beiträge: 53

02.03.2014, 02:29:36 via Website

Ich guck mir ja schon die ganzen Videos von ihm an wo er alles erklärt..

Naja ich guck denn nochmal nach nur ich versteh einfach nicht warum das Spiel nicht mehr läuft.. ich muss irgendwie was gelöscht oder verändert haben.. weil als das Tutorial 27 glaub ich zuende war sollte das Spiel laufen und halt ein PaiseMenü eingebaut sein.. das PauseMenü wurde dann erst nicht angezeigt dann bin ich das Tutorial nochmal durchgegang und jetzt geht das Spiel nicht mehr bzw im Debug Modus kommt ein Schwarzer Bildschirm und da geht das Pause Menü aber das Spiel allgemein nicht mehr..

Deine GameView erbt von SurfaceView. Du versuchst im Konstruktor nun aber einen SurfaveView.Callback in ein GameView zu casten. Das funktioniert nimmer! Also den Konstruktor ganz weg lassen.Du hast eine NullPointerException bekommen, hast du dir die Zeile mal angesehen? (Wir konnten das dank fehlender Importe nicht.) Ich schätze mal, dass theView null war. Wo wird denn theView ein Wert zu gewiesen? Nirgendwo.

Das mit dem Konstruktor versteh ich der muss also weg (den find ich nur leider nicht)

Das mit dem getHolder kapier ich nicht ganz.. ob der jetzt auch weg muss oder ob ich da etwas verändern muss:angry::wacko:

— geändert am 02.03.2014, 02:38:46

Antworten
Michele
  • Forum-Beiträge: 1.525

02.03.2014, 02:34:10 via Website

Wenn du magst, lade dein Projekt hoch und ich gucke es mir mal an.


LG

Antworten
André
  • Forum-Beiträge: 53

02.03.2014, 02:41:53 via Website

Ja wäre nett nur bin gerade nicht Zuhause könnte es morgen Abend bzw heute Abend denn hier her Posten kann man hier ein Projekt einfügen?

— geändert am 02.03.2014, 02:44:05

Antworten
Michele
  • Forum-Beiträge: 1.525

02.03.2014, 02:43:18 via Website

Nein kannst du nicht.

Lade es irgendwo hoch wo du kannst wie z.B Dropbox und Poste den Link.


LG

Antworten
André
  • Forum-Beiträge: 53

02.03.2014, 02:45:43 via Website

Ok denn mach ich das und Poste hier morgen Abend den Link :)

— geändert am 02.03.2014, 02:46:11

Antworten
André
  • Forum-Beiträge: 53

02.03.2014, 19:52:04 via Website

Habe mein Projekt jetzt hochgeladen stimmt so?

Link: lazydragons.zip

Antworten
Michele
  • Forum-Beiträge: 1.525

03.03.2014, 01:21:17 via Website

Danke dir.

Werde es mir mal angucken.


LG

Antworten
André
  • Forum-Beiträge: 53

03.03.2014, 06:20:08 via Website

Ok danke :)

Antworten
André
  • Forum-Beiträge: 53

04.03.2014, 08:01:20 via Website

schon etwas gefunden?:)

Antworten
Andreas S.
  • Forum-Beiträge: 76

05.03.2014, 21:03:12 via Website

:huh: Der Konstruktor wird nichtmal verwendet, so kann natürlich auch keine Referenz gesetzt werden..

— geändert am 05.03.2014, 21:03:44

Antworten
André
  • Forum-Beiträge: 53

05.03.2014, 21:30:56 via Website

Das heisst was muss ich tun? oder hat die schon irgendjemand wieder zum laufen bekommen?

Antworten
Andreas S.
  • Forum-Beiträge: 76

05.03.2014, 21:52:04 via App

Anstatt dem grünen //ToDo Auto-Generated....:

this.theView = gameView;

Antworten
André
  • Forum-Beiträge: 53

05.03.2014, 22:09:10 via Website

habe das jetzt gemacht jetzt sind aber diese Erros im LogCat

103-05 21:07:49.078: W/dalvikvm(333): threadid=9: thread exiting with uncaught exception (group=0x40015560)
203-05 21:07:49.128: E/AndroidRuntime(333): FATAL EXCEPTION: Thread-11
303-05 21:07:49.128: E/AndroidRuntime(333): java.lang.ClassCastException: com.crazy.lazydragon.GameView
403-05 21:07:49.128: E/AndroidRuntime(333): at com.crazy.lazydragon.GameView.createSprite(GameView.java:137)
503-05 21:07:49.128: E/AndroidRuntime(333): at com.crazy.lazydragon.GameView.initialSprites(GameView.java:145)
603-05 21:07:49.128: E/AndroidRuntime(333): at com.crazy.lazydragon.GameView.draw(GameView.java:86)
703-05 21:07:49.128: E/AndroidRuntime(333): at com.crazy.lazydragon.GameLoopThread.run(GameLoopThread.java:33)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.03.2014, 22:41:30 via App

Das casten zur GameView klappt nicht. poste mal den entsprechenden Code

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Andreas S.
  • Forum-Beiträge: 76

05.03.2014, 22:47:51 via Website

Ich habs nochmal angeschaut.. hier die Methode aus der Klasse GameView:

1private void createSprite(int index) {
2 Bitmap bmp = null;
3 switch (index) {
4 case 0:
5 bmp = BitmapFactory.decodeResource(getResources(),
6 R.drawable.alienspriteblue);
7 break;
8 case 1:
9 bmp = BitmapFactory.decodeResource(getResources(),
10 R.drawable.alienspritered);
11 break;
12 case 2:
13 bmp = BitmapFactory.decodeResource(getResources(),
14 R.drawable.alienspritegreen);
15 break;
16 case 3:
17 bmp = BitmapFactory.decodeResource(getResources(),
18 R.drawable.alienspriteyellow1);
19 break;
20 }
21 Sprite sprite = new Sprite((Callback) this, bmp); (Hier knallts...)
22 spriteList.add(sprite);
23 spriteListNum.add(index);
24 }

Also GameView implementiert definitv nicht das Callback zur SurfaceView

und hier entsprechend der Konstruktor der Sprite Klasse:

1public Sprite(Callback callback, Bitmap bmp) {
2 this.theGameView = (GameView) callback;
3 this.bmp = bmp;
4 this.width = bmp.getWidth() / BMP_COLUMNS;
5 this.height = bmp.getHeight() / BMP_ROWS;
6 Random rnd = new Random();
7 x = (int) (30 * ((Canvas) callback).getDensity() + rnd.nextInt((int) (((Canvas) callback)
8 .getWidth() - width - 50 * ((Canvas) callback).getDensity())));
9 y = (int) (30 * ((Canvas) callback).getDensity() + rnd.nextInt((int) (((Canvas) callback)
10 .getHeight() - height - 50 * ((Canvas) callback).getDensity())));
11 ySpeed = (int) ((rnd.nextInt(10) - 4)*((Canvas) callback).getDensity());
12 xSpeed = (int) ((rnd.nextInt(10) - 4)*((Canvas) callback).getDensity());
13 }

Es wird vorher versucht die Instanz der GameView Klasse zu Callback zu casten und hier im Konstruktor wieder von Callback zu GameView.
Also hier stimmt einiges nicht...

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.03.2014, 22:57:53 via App

Wieso musst du diese casts in callback machen also irgendwir ist das unötig kompliziert und könnt eine optimierung vertragen.

— geändert am 05.03.2014, 22:58:07

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
André
  • Forum-Beiträge: 53

05.03.2014, 23:03:51 via Website

Ich weiß nicht hab nur das Tutorial gemacht..kann es vielleicht sein das ich dieses Callback ausversehen eingefügt habe? ich glaube das gab es nicht mal im Tutorial

— geändert am 05.03.2014, 23:07:19

Antworten
André
  • Forum-Beiträge: 53

05.03.2014, 23:17:19 via Website

Hab es hinbekommen ! Es läuft wieder jetzt sogar mit dem Pause Menü wie es gewollt war :D:lol::grin:

Das lag am Callback 8o:sleep:

hab es einfach in der Sprite und in der GameView entfernt jetzt läuft alles .. doofer Fehler

Danke das ihr mir geholfen habt -_-

— geändert am 05.03.2014, 23:25:21

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.03.2014, 00:03:12 via App

jop.
Kein Problem. Aber man sollte seinen Code auch verstehen nicht nur aus einem Tut übernehmen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
André
  • Forum-Beiträge: 53

06.03.2014, 22:45:00 via Website

Moin nochmal jetzt habe ich das Tutorial durch, allerdings habe ich noch ein paar Errors.

Spiel startet nicht und diese Fehler kommen im Log Cat

manchmal Startet die ab und stürzt erst beim Replay Button ab oder sie startet gar nicht.

Hilfe wäre nett :)


LG

103-06 22:11:14.185: E/dalvikvm-heap(336): 3686400-byte external allocation too large for this process.
203-06 22:11:14.293: E/GraphicsJNI(336): VM won't let us allocate 3686400 bytes
303-06 22:11:14.343: E/AndroidRuntime(336): FATAL EXCEPTION: main
403-06 22:11:14.343: E/AndroidRuntime(336): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.crazy.lazydragon/com.crazy.lazydragon.GameOverActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
503-06 22:11:14.343: E/AndroidRuntime(336): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
603-06 22:11:14.343: E/AndroidRuntime(336): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
703-06 22:11:14.343: E/AndroidRuntime(336): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
803-06 22:11:14.343: E/AndroidRuntime(336): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
903-06 22:11:14.343: E/AndroidRuntime(336): at android.os.Handler.dispatchMessage(Handler.java:99)
1003-06 22:11:14.343: E/AndroidRuntime(336): at android.os.Looper.loop(Looper.java:123)
1103-06 22:11:14.343: E/AndroidRuntime(336): at android.app.ActivityThread.main(ActivityThread.java:3683)
1203-06 22:11:14.343: E/AndroidRuntime(336): at java.lang.reflect.Method.invokeNative(Native Method)
1303-06 22:11:14.343: E/AndroidRuntime(336): at java.lang.reflect.Method.invoke(Method.java:507)
1403-06 22:11:14.343: E/AndroidRuntime(336): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
1503-06 22:11:14.343: E/AndroidRuntime(336): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
1603-06 22:11:14.343: E/AndroidRuntime(336): at dalvik.system.NativeStart.main(Native Method)
1703-06 22:11:14.343: E/AndroidRuntime(336): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
1803-06 22:11:14.343: E/AndroidRuntime(336): at android.view.LayoutInflater.createView(LayoutInflater.java:518)
1903-06 22:11:14.343: E/AndroidRuntime(336): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
2003-06 22:11:14.343: E/AndroidRuntime(336): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
2103-06 22:11:14.343: E/AndroidRuntime(336): at android.view.LayoutInflater.inflate(LayoutInflater.java:386)
2203-06 22:11:14.343: E/AndroidRuntime(336): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
2303-06 22:11:14.343: E/AndroidRuntime(336): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
2403-06 22:11:14.343: E/AndroidRuntime(336): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
2503-06 22:11:14.343: E/AndroidRuntime(336): at android.app.Activity.setContentView(Activity.java:1657)
2603-06 22:11:14.343: E/AndroidRuntime(336): at com.crazy.lazydragon.GameOverActivity.onCreate(GameOverActivity.java:22)
2703-06 22:11:14.343: E/AndroidRuntime(336): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
2803-06 22:11:14.343: E/AndroidRuntime(336): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
2903-06 22:11:14.343: E/AndroidRuntime(336): ... 11 more
3003-06 22:11:14.343: E/AndroidRuntime(336): Caused by: java.lang.reflect.InvocationTargetException
3103-06 22:11:14.343: E/AndroidRuntime(336): at java.lang.reflect.Constructor.constructNative(Native Method)
3203-06 22:11:14.343: E/AndroidRuntime(336): at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
3303-06 22:11:14.343: E/AndroidRuntime(336): at android.view.LayoutInflater.createView(LayoutInflater.java:505)
3403-06 22:11:14.343: E/AndroidRuntime(336): ... 21 more
3503-06 22:11:14.343: E/AndroidRuntime(336): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
3603-06 22:11:14.343: E/AndroidRuntime(336): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
3703-06 22:11:14.343: E/AndroidRuntime(336): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:460)
3803-06 22:11:14.343: E/AndroidRuntime(336): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336)
3903-06 22:11:14.343: E/AndroidRuntime(336): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
4003-06 22:11:14.343: E/AndroidRuntime(336): at android.content.res.Resources.loadDrawable(Resources.java:1709)
4103-06 22:11:14.343: E/AndroidRuntime(336): at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
4203-06 22:11:14.343: E/AndroidRuntime(336): at android.view.View.<init>(View.java:1951)
4303-06 22:11:14.343: E/AndroidRuntime(336): at android.view.View.<init>(View.java:1899)
4403-06 22:11:14.343: E/AndroidRuntime(336): at android.view.ViewGroup.<init>(ViewGroup.java:286)
4503-06 22:11:14.343: E/AndroidRuntime(336): at android.widget.RelativeLayout.<init>(RelativeLayout.java:173)
4603-06 22:11:14.343: E/AndroidRuntime(336): ... 24 more

— geändert am 06.03.2014, 23:59:00

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

06.03.2014, 23:59:52 via App

1java.lang.RuntimeException: Unable to start activity ComponentInfo{com.crazy.lazydragon/com.crazy.lazydragon.GameOverActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class

Ich bin kein Experte, aber wenn ich das richtig verstehe ist in dem Layout ein Fehler, welche deine Activity zunichte macht. poste mal das XML-layout

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten
Andreas S.
  • Forum-Beiträge: 76

07.03.2014, 00:09:27 via Website

1103-06 22:11:14.185: E/dalvikvm-heap(336): 3686400-byte external allocation too large for this process.
2203-06 22:11:14.293: E/GraphicsJNI(336): VM won't let us allocate 3686400 bytes

Das Bitmap das geladen werden soll beim Inflaten des Layouts ist zu groß.
--> 3.51563 MB
Versuche Bitmaps ordentlich zu recyclen wenn diese nicht mehr benötigt werden.
Ein Bild mit 3,51 MB ist schon extrem, versuche die Speicherkapazität die das Bild einnimmt zu verringern (Stichwort ScaledBitmap).

Antworten