Почему такая реализация меню в libGDX не работает?
Пытаюсь реализовать меню, который работает следующим образом. Нажимаем на MenuMainPage переходим на MenuFirstPage, нажимаем на MenuFirstPage и переходим на MenuSecondPage, нажимаем на MenuSecondPage переходим обратно на MenuMainPage и так до бесконечности. Но когда перехожу с MenuFirstPage на MenuSecondPage выдает ошибку, хотя с MenuMainPage на MenuFirstPage переходит без проблем. Не понимаю, то ли код неверно написал, что JRE его не воспринимает, то ли с JRE какие-то проблемы (хотя АндроидСтудио обновил, поставил новый OpenJDK 13.0.2).
public class MainGame extends Game {
@Override
public void create() {
setScreen(new MenuMainPage(this));
}
}
public class MenuMainPage implements Screen {
public SpriteBatch batch;
public BitmapFont font;
public MainGame game;
public MenuMainPage(MainGame game){
this.game = game;
batch = new SpriteBatch();
font = new BitmapFont();
}
@Override
public void show() {
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
font.draw(batch, "MenuMainPage", 30,30);
if(Gdx.input.justTouched()) {
game.setScreen(new MenuFirstPage(game));
}
batch.end();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
dispose();
}
@Override
public void dispose() {
batch.dispose();
font.dispose();
}
}
public class MenuFirstPage implements Screen {
public SpriteBatch batch;
public BitmapFont font;
public MainGame game;
public MenuFirstPage(MainGame game){
this.game = game;
batch = new SpriteBatch();
font = new BitmapFont();
}
@Override
public void show() {
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
font.draw(batch, "MenuFirstPage", 30,30);
if(Gdx.input.justTouched()) {
game.setScreen(new MenuSecondPage(game));
}
batch.end();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
dispose();
}
@Override
public void dispose() {
batch.dispose();
font.dispose();
}
}
public class MenuSecondPage implements Screen {
public SpriteBatch batch;
public BitmapFont font;
public MainGame game;
public MenuSecondPage(MainGame game) {
this.game = game;
batch = new SpriteBatch();
font = new BitmapFont();
}
@Override
public void show() {
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
font.draw(batch, "MenuSecondPage", 30,30);
if(Gdx.input.justTouched()) {
game.setScreen(new MenuMainPage(game));
}
batch.end();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
dispose();
}
@Override
public void dispose() {
batch.dispose();
font.dispose();
}
}
public class DesktopLauncher {
public static void main (String[] arg) {
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
new LwjglApplication(new MainGame(), config);
}
}
А выхлоп дает такой:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffc11f9d17e, pid=3144, tid=0x0000000000002864
#
# JRE version: OpenJDK Runtime Environment (8.0_212-b04) (build 1.8.0_212-release-1586-b04)
# Java VM: OpenJDK 64-Bit Server VM (25.212-b04 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C [ntdll.dll+0x3d17e]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\Android\LibGDXProjects\ExpMenu\hs_err_pid3144.log
#
# If you would like to submit a bug report, please visit:
#
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
[error occurred during error reporting , id 0xc0000005]
Process finished with exit code 1
P.S. Проверил код на другом компьютере, выдает такую же ошибку.
Ответы (1 шт):
Надо перенести код перехода на новый экран ниже batch.end():
...
batch.end();
if(Gdx.input.justTouched()) {
game.setScreen(new MenuFirstPage(game));
}