2

多くの人がこれと同じことを尋ねてきたことは知っていますが、何が起こっているのかわかりません。Eclipse で電卓を作成しようとしていますが、エラーのリストが表示され続けます。プログラムが気付くファイルにはエラーはありませんが、layout.xml にはエラーがありますが、これまで問題が発生していないため、問題は発生しないはずです。

07-30 08:19:50.470: D/AndroidRuntime(2071): Shutting down VM
07-30 08:19:50.470: W/dalvikvm(2071): threadid=1: thread exiting with uncaught
exception (group=0x40a421f8)
07-30 08:19:50.480: E/AndroidRuntime(2071): FATAL EXCEPTION: main
07-30 08:19:50.480: E/AndroidRuntime(2071): java.lang.RuntimeException: Unable to start
activity
ComponentInfo{com.example.se.miun.chris.calculator/com.example.se.miun.chris.
calculator.MainActivity}: java.lang.NullPointerException
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
android.app.ActivityThread.access$600(ActivityThread.java:123)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
android.os.Handler.dispatchMessage(Handler.java:99)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
android.os.Looper.loop(Looper.java:137)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
android.app.ActivityThread.main(ActivityThread.java:4424)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
java.lang.reflect.Method.invokeNative(Native Method)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
java.lang.reflect.Method.invoke(Method.java:511)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
dalvik.system.NativeStart.main(Native Method)
07-30 08:19:50.480: E/AndroidRuntime(2071): Caused by: java.lang.NullPointerException
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
com.example.se.miun.chris.calculator.MainActivity.onCreate(MainActivity.java:60)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
android.app.Activity.performCreate(Activity.java:4465)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
07-30 08:19:50.480: E/AndroidRuntime(2071):     at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
07-30 08:19:50.480: E/AndroidRuntime(2071):     ... 11 more

これは私のコーディングです。まだ何もしていませんが、実行してエラーが発生したかどうかを確認したかっただけです。これは mainActivity.java ファイルです。

import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {
Button Seven;
Button Eight;
Button Nine;
Button Four;
Button Five;
Button Six;
Button One;
Button Two;
Button Three;
Button Zero;
Button Point;
Button Negative;
TextView TextBox;
int x;
int y;
String z;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Seven = (Button)findViewById(R.id.NumberSeven);
    Seven.setOnClickListener(this);
    Eight = (Button)findViewById(R.id.NumberEight);
    Eight.setOnClickListener(this);
    Nine = (Button)findViewById(R.id.NumberNine);
    Nine.setOnClickListener(this);
    Four = (Button)findViewById(R.id.NumberFour);
    Four.setOnClickListener(this);
    Five = (Button)findViewById(R.id.NumberFive);
    Five.setOnClickListener(this);
    Six = (Button)findViewById(R.id.NumberSix);
    Six.setOnClickListener(this);
    One = (Button)findViewById(R.id.NumberOne);
    One.setOnClickListener(this);
    Two = (Button)findViewById(R.id.NumberTwo);
    Two.setOnClickListener(this);
    Three = (Button)findViewById(R.id.NumberThree);
    Three.setOnClickListener(this);
    Zero = (Button)findViewById(R.id.NumberZero);
    Zero.setOnClickListener(this);
    Point = (Button)findViewById(R.id.Point);
    Point.setOnClickListener(this);
    Negative = (Button)findViewById(R.id.NNegative);
    Negative.setOnClickListener(this);
    TextBox = (TextView)findViewById(R.id.Screen);
    x = (Integer) null;
    y = (Integer) null;


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public void onClick(View One) {
    if(z == null){
        x = 1;
            TextBox.setText(x);
            TextBox.setText("diggity");
        }
        else if(z != null) {
            y = 1;
            TextBox.setText(x);
            TextBox.setText(z);
            TextBox.setText(y);
        }


    }
}
4

2 に答える 2

4

60行目:x =(整数)null; この行は、このバイトコード(javapによって分解されます)にコンパイルされます。

  1. aconst_null
  2. チェックキャスト #2; //クラスjava/lang / Integer
  3. invokevirtual #3; //メソッドjava/lang / Integer.intValue :()I

整数オブジェクトは実際にはnull定数であるため、3行目でNullPointerExceptionが発生します:)

プリミティブデータ型(int、longなど)は、Javaの唯一の非オブジェクト型です。nullは、現在の変数(オブジェクト変数)が実際のオブジェクトによってサポートされていない(メモリが割り当てられていない)ことを示すために使用されます。プリミティブ型の場合、メモリはすぐに割り当てられるため、このnull状態になることはありません。

したがって、「if(x == 0)」をチェックするか、整数として定義する必要があります。

PSそして何にもnullをキャストしないでください:)

于 2012-07-30T15:13:51.170 に答える
3

こんな感じです

アプリケーションを起動できないため、エラーはあまり発生しません。onCreate()が終了できないため、起動できません。

nullPointerExceptionが原因で、onCreate()を終了できません。

デフォルトで0になる新しい整数を単純にインスタンス化する代わりに、nullを整数に2回キャストします。それを取り除くと、機能するはずです。

見る?

E/AndroidRuntime(2071): Caused by: java.lang.NullPointerException
E/AndroidRuntime(2071):     at
MainActivity.onCreate(MainActivity.java:60)

これは60行目だと思います

x = (Integer) null;

に変更します

x = new Integer();
于 2012-07-30T13:49:26.033 に答える