TextArea.continueCursor(TextArea.java:331) / ArrayIndexOutOfBoundsException: 16

TextArea.continueCursor(TextArea.java:331) / ArrayIndexOutOfBoundsException: 16

导致此错误的原因可能是什么? (想不通)

Exception in thread "LWJGL Application" java.lang.ArrayIndexOutOfBoundsException: 16
at com.badlogic.gdx.scenes.scene2d.ui.TextArea.continueCursor(TextArea.java:331)
at com.badlogic.gdx.scenes.scene2d.ui.TextArea.calculateOffsets(TextArea.java:278)
at com.badlogic.gdx.scenes.scene2d.ui.TextField.draw(TextField.java:283)
at com.badlogic.gdx.scenes.scene2d.Group.drawChildren(Group.java:124)
at com.badlogic.gdx.scenes.scene2d.Group.draw(Group.java:58)
at com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup.draw(WidgetGroup.java:154)
at com.badlogic.gdx.scenes.scene2d.ui.Table.draw(Table.java:123)
at com.badlogic.gdx.scenes.scene2d.Group.drawChildren(Group.java:111)
at com.badlogic.gdx.scenes.scene2d.Group.draw(Group.java:58)
at com.badlogic.gdx.scenes.scene2d.Stage.draw(Stage.java:128)
at se.scapegoat.channelsclient.screens.AbstractScreen.render(AbstractScreen.java:36)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:207)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.run(LwjglApplication.java:114)

这可能是由于线程安全问题 - 我可以不从任何地方设置文本吗?

如您所说,很可能是线程问题。

您的堆栈跟踪引用的代码正在遍历字符串中的每个字符。如果您在循环中间将字符串更改为较短的字符串,则会导致此类问题。

解决此问题的一种方法是 运行 您的文本更改代码使用 Application.postRunnable()

LibGdx 本质上不是线程安全的,虽然可以编写使用它的线程代码,但您必须注意在哪些线程上发生了什么。

有一些关于 libgdx 线程 on this page 的信息。