App startet nicht mehr Fatal Exception

  • Antworten:95
  • OffenNicht stickyNicht beantwortet
  • 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
  • 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
  • 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
  • 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
  • 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
  • Forum-Beiträge: 53

01.03.2014, 15:40:23 via Website

Hab ich jetzt gemacht ändert sich aber nichts

Antworten
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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

Empfohlene Artikel