簡體   English   中英

Android崩潰,崩潰報告未顯示在Android Studio控制台中

[英]Android crashed and the crash report doesn't show in the Android Studio console

所以我有一個我正在寫的Android Tetris游戲。 當我在模擬器中運行應用程序並單擊開始按鈕時它崩潰了。 沒有一個對話框顯示應用程序已停止運行(通常在拋出異常時得到它,對吧?)。 我不知道哪行代碼拋出異常,因為我看不到堆棧跟蹤! 有誰知道崩潰報告的位置或我如何看到堆棧跟蹤? 我是android的初學程序員,我曾經寫過WinForms應用程序。

我只展示了部分代碼。 如果您認為問題出在其他地方,請告訴我,以便我可以在此處發布。

順便說一句,如果我犯了任何語法錯誤,對不起我的英語不好,因為我是中國人。

以下是代碼:開始按鈕:

<Button
    android:layout_width="319dp"
    android:layout_height="160dp"
    android:text="START"
    android:id="@+id/buttonStart"
    android:layout_x="8dp"
    android:layout_y="116dp"
    android:textSize="30pt"
    android:onClick="btnStartClick"
    android:layout_below="@+id/textView"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"/>

OnClick事件處理程序:

public void btnStartClick (View view) {
    startActivity (new Intent (StartPage.this, TetrisActivity.class));
}

TetrisActivity的onCreate方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_tetris);
    board = new TetrisBoard (this);//board is a TetrisBoard instance
    board.addTetrimino ();

}

TetrisBoard類

public class TetrisBoard implements ITetrisEventListener{
private TetrisActivity activity;
private Random r;

public TetrisBlock[][] tetrisBlockMatrix;

public TetrisBoard (TetrisActivity activity) {
    tetrisBlockMatrix = new TetrisBlock[16][22];
    r = new Random ();
    this.activity = activity;
}

public void addTetrimino () {
    Tetrimino tetrimino = null;
    int randomNumber = r.nextInt (140);
    if (randomNumber < 20) {
        tetrimino = new OShapedTetrimino (tetrisBlockMatrix, activity);
    } else if (randomNumber < 40) {
        tetrimino = new IShapedTetrimino (r.nextInt (2), tetrisBlockMatrix,
                activity);
    } else if (randomNumber < 60) {
        tetrimino = new ZShapedTetrimino (r.nextInt (2), tetrisBlockMatrix,
                activity);
    } else if (randomNumber < 80) {
        tetrimino = new SShapedTetrimino (r.nextInt (2), tetrisBlockMatrix,
                activity);
    } else if (randomNumber < 100) {
        tetrimino = new TShapedTetrimino (r.nextInt (4), tetrisBlockMatrix,
                activity);
    } else if (randomNumber < 120) {
        tetrimino = new JShapedTetrimino (r.nextInt (4), tetrisBlockMatrix,
                activity);
    } else {
        tetrimino = new LShapedTetrimino (r.nextInt (4), tetrisBlockMatrix,
                activity);
    }

    tetrimino.registerLandedListeners (this);
    tetrimino.setTimerInterval (activity.timerInterval);
    activity.fallingTetrimino = tetrimino;
}

@Override
public void onLanded(Tetrimino sender) {
    try {
        sender.addTetrisBlocksToMatrix (tetrisBlockMatrix);
        activity.checkScore ();
        addTetrimino ();
    } catch (IllegalArgumentException e) {
        TetrisUtility.showMsgDialog ("Game Over", "Tetris", activity);
        activity.finish ();
    }
}

}

最后是Tetrimino類:

public abstract class Tetrimino {
public TetrisBlock[] blocks;

protected Timer timer;
protected TetrisBlock[][] tetrisBlockMatrix;
protected ArrayList<ITetrisEventListener> landedEventListeners;
protected TimerTask task = new TimerTask () {
    @Override
    public void run() {
        moveDown ();
    }
};

public static final int LEFT = -1;
public static final int RIGHT = 1;

protected abstract TetrisBlock[] getTouchingSides();

protected void landed () {
    for (int i = 0 ; i < landedEventListeners.size () ; i++) {
        landedEventListeners.get (i).onLanded (this);
    }
}

public void registerLandedListeners (ITetrisEventListener listener) {
    landedEventListeners.add (listener);
}

public void moveDown () {
    if (!checkLanded ()) {
        for (TetrisBlock block:blocks) {
            block.moveDown ();
        }
    } else {
        timer.cancel ();
        landed ();
    }
}

protected boolean checkLanded () {
    TetrisBlock[] touchingSides = getTouchingSides ();
    for (TetrisBlock block:touchingSides) {
        if (block.getY () >= 21) {
            return true;
        }

        if (tetrisBlockMatrix[block.getX ()][block.getY () + 1] != null) {
            return true;
        }
    }
    return false;
}

public boolean checkPositionValid (int x, int y) {
    if (x < 0 || y < 0 ||
            x > 15 || y > 21)
        return false;
    if (tetrisBlockMatrix[x][y] == null)
        return true;
    return false;
}

public void move (int side) {
    if (side == 1 || side == -1) {
        for (TetrisBlock block:blocks) {
            block.setX (block.getX () + side);
        }

        for (TetrisBlock block:blocks) {
            if (!checkPositionValid (block.getX (), block.getY ())) {
                if (side == LEFT)
                    move (RIGHT);
                else
                    move (LEFT);
            }
        }
    } else {
        throw new IllegalArgumentException ();
    }
}

public void addTetrisBlocksToMatrix (TetrisBlock[][] matrix) {
    for (TetrisBlock block:blocks) {
        if (matrix[block.getX ()][block.getY ()] == null) {
            matrix[block.getX ()][block.getY ()] = block;
        } else {
            throw new IllegalArgumentException ();
        }
    }
}

public void setTimerEnabled (boolean value) {
    if (value) {
        timer.cancel ();
        timer = new Timer ();
        timer.scheduleAtFixedRate (task, 0L, 1000L);
    } else {
        timer.cancel ();
    }
}

public void setTimerInterval (int milliseconds) {
    timer.cancel ();
    timer = new Timer ();
    timer.scheduleAtFixedRate (task, 0L, milliseconds);
}

protected Tetrimino (TetrisBlock[][] matrix, TetrisActivity activity) {
    this.tetrisBlockMatrix = matrix;
    timer = new Timer ();
    timer.scheduleAtFixedRate (task, 0L, 1000L);
    landedEventListeners = new ArrayList<> ();
    blocks = new TetrisBlock[4];
}

}

我通過反復循環以下來修復它:

  • 重啟Logcat
  • 將過濾器更改為“僅顯示所選應用程序中的無過濾器”
  • 將日志級別更改為“調試”並返回到“詳細”
  • 拔下並拔回設備
  • 運行adb kill-server和adb start-server
  • 重啟Android Studio
  • 重啟電腦

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM