0

私はJavaとAndroidの開発にも不慣れで、Wildfire Sで簡単なゲームをしばらく作成していて、Null Pointer Exceptionが発生するたびに、何が原因であるかを正確に特定できない場合を除いて、順調に進んでいます。

私が検索したすべてのフォーラムでは、Null Pointer Exceptionとは何か、またはそれらを先制的に克服する方法について詳しく説明していますが、それは私が必要としていることではありません。

ここで私が直面している問題は、Eclipseが私の注意を引いているように見えるコードの部分が完全に正常に見え、私はそれをまったく編集していないということです。だから私はどこかで間違って何かを変えたのかもしれません。どの領域が編集されているのかわからないので、エラーがスローされている理由がわからないようです。

ログには、非常に長い間編集されていないGoalieMenu.javaのonCreateメソッドでエラーが発生していることが示されているようです。これは、mainmenu.xmlをレイアウトとして使用する単なるアクティビティであり、3つのボタン(start、howToPlay、Exit)が含まれています。各ボタンには独自のXMLがあり、すべて問題ないようです...

これは本当に馬鹿げた明白なことになるのではないかと心配していますが、私は自分が見ているものにあまり精通していないので、時間がかかり、見つけることができません!! grr

これがログです:

04-04 16:27:57.277: ERROR/AndroidRuntime(2831): FATAL EXCEPTION: main
04-04 16:27:57.277: ERROR/AndroidRuntime(2831): java.lang.RuntimeException: Unable 
to  start activity     
ComponentInfo{com.luk.games.Goalie/com.luk.games.Goalie.GoalieMenu}:
java.lang.NullPointerException
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1830)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
android.app.ActivityThread.access$1500(ActivityThread.java:132)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
android.os.Handler.dispatchMessage(Handler.java:99)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
android.os.Looper.loop(Looper.java:150)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
android.app.ActivityThread.main(ActivityThread.java:4277)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
java.lang.reflect.Method.invokeNative(Native Method)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
java.lang.reflect.Method.invoke(Method.java:507)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
dalvik.system.NativeStart.main(Native Method)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831): Caused by: 
java.lang.NullPointerException

04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
com.luk.games.Goalie.GoalieMenu.onCreate(GoalieMenu.java:34)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794)
04-04 16:27:57.277: ERROR/AndroidRuntime(2831):     ... 11 more

GoalieMenu.javaは次のとおりです。

package com.luk.games.Goalie;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;

public class GoalieMenu extends Activity {

private Button startGameButton;
private Button howToPlayButton;
private Button exitButton;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
       requestWindowFeature(Window.FEATURE_NO_TITLE);
       getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
               WindowManager.LayoutParams.FLAG_FULLSCREEN);
       setContentView(R.layout.mainmenu);

      this.startGameButton = (Button)this.findViewById(R.id.startGameButton);
      this.startGameButton.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
          startActivity(new Intent("com.luk.games.Goalie.GameActivity"));       
          }
      });

       this.howToPlayButton = (Button)this.findViewById(R.id.howToPlayButton);
       this.howToPlayButton.setOnClickListener(new OnClickListener() {
           public void onClick(View v) {
              startActivity(new Intent("com.luk.games.Goalie.HowToPlayActivity"));              
            }
        });

       this.exitButton = (Button)this.findViewById(R.id.exitButton);
       this.exitButton.setOnClickListener(new OnClickListener() {
           public void onClick(View v) {
               finish();
           }
       });
}
}

mainmenu.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:background="@drawable/mainmenuscreen"
    android:layout_height="match_parent" android:orientation="vertical">
<Button 
    android:id="@+id/startGameButton"
    android:background="@layout/startgamebutton"
    android:layout_height="50dp" 
    android:layout_width="180dp"
    android:layout_gravity="center"
    android:layout_marginTop="100dip"/>
<Button 
    android:id="@+id/howToPlayButton"
    android:background="@layout/howtoplaybutton"
    android:layout_height="50dp" 
    android:layout_width="180dp"
    android:layout_gravity="center"/>
<Button
    android:id="@+id/exitButton"
    android:background="@layout/exitbutton"
    android:layout_height="50dp"
    android:layout_width="180dp"
    android:layout_gravity="center"/>
</LinearLayout>
4

4 に答える 4

2

GoalieMenu.java:34、これだと思いますhowToPlayButton.setOnClickListener

howToPlayButtonがnullになる可能性があります。

デバッグして使用trycatch、疑わしい場所。

于 2012-04-04T16:01:05.763 に答える
0

次のように新しいアクティビティを開始してみてください。

startActivity(new Intent(getApplicationContext(), 
        GameActivity.class)); 

同じHowToPlayActivity

于 2012-04-04T16:03:42.900 に答える
0

私の推測では、findViewByIdステートメントの1つに問題があると思います。R.idによって参照されている要素があるかどうかを確認してください。実際には、レイアウトxmlに存在します。

于 2012-04-04T16:06:53.397 に答える
0

コードを少し変更して、これを試してください::::

public class GoalieMenu extends Activity {

private Button startGameButton;
private Button howToPlayButton;
private Button exitButton;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
       requestWindowFeature(Window.FEATURE_NO_TITLE);
       getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
               WindowManager.LayoutParams.FLAG_FULLSCREEN);
       setContentView(R.layout.mainmenu);

      findViewById(R.id.startGameButton).setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
          startActivity(new Intent("com.luk.games.Goalie.GameActivity"));       
          }
      });

      findViewById(R.id.howToPlayButton).setOnClickListener(new OnClickListener() {
           public void onClick(View v) {
              startActivity(new Intent("com.luk.games.Goalie.HowToPlayActivity"));              
            }
        });

       findViewById(R.id.exitButton).setOnClickListener(new OnClickListener() {
           public void onClick(View v) {
               finish();
           }
       });
}
}

これを試して....

于 2012-04-04T17:17:13.980 に答える