2

私は四肢に出て、スイッチケースで Enum を使用しようとしました。しかし、明らかに、私は何か間違ったことをしています。

Enumを定義するコードは次のとおりです。

public class WorkoutStopwatch extends Activity implements OnClickListener {

    private boolean timer_running = false;
    public enum CounterState {
        WORKOUT, REST
    }
    CounterState state;

そして、私がそれを利用するオーバーライドされた onClick メソッド:

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
        case R.id.start_button:
            timer_running = true;
            // Make call to timer update class to start
            break;
        case R.id.stop_button:
            timer_running = false;
            // Make call to timer update class to stop
            break;
        case R.id.reset_button:

            if (!timer_running) {
                switch(state) {
                case WORKOUT:
                    // TODO: Reset the counter to the workout time
                    break;
                case REST:
                    // TODO: Reset the counter to the rest time
                    break;
                }
            }
            break;
        }
    }

プログラムを実行すると、[開始] ボタンと [停止] ボタンの onClick 呼び出しは正常に機能しますが、[リセット] ボタンを使用すると、スイッチの行に向けられた "FATAL EXCEPTION: main" および "java.lang.NullPointerException" エラーでアプリケーションがクラッシュします。 . 私が読んだことから、スイッチを読み取るときに列挙型の値がnullである可能性が高いと思われるため、列挙型宣言を次のように変更しました。

    private enum CounterState {
        UNKNOWN(0),
        WORKOUT(1), 
        REST(2);

        private int stateValue;

        CounterState(int state) {
            this.stateValue = state;
        }

        public int getStateValue() {
            return stateValue;
        }

        public void setStateValue(int state) {
            this.stateValue = state;
        }       
    }

    CounterState state;

より完全な定義のように見えますが、まだ問題が見られます。このようなコードを残しても問題は解決しませんでした。読み取り時に状態が null だったようです。次のように、オブジェクトの宣言に int を追加します。

CounterState state(0);

「トークン "0" の構文エラー、このトークンを削除してください」という Eclipse エラーが表示されます。だから私は少し迷っています。私が言えることから、列挙型のコンストラクターがあり、作成時に値を初期化するために int を渡すことができるはずですが、うまくいかないようです。

4

3 に答える 3

4

state変数を使用する前に初期化を試みましたか?

CounterState state = CounterState.UNKNOWN;
于 2013-09-03T15:12:54.240 に答える
0

おそらくエラーの原因は次のとおりです。
「v.getId()」がnullです。

于 2018-11-29T09:55:42.330 に答える