运行 我的 codenameone 应用程序出现此错误,我不知道确切的问题是什么
I'm getting this error while running my codenameone application and i didn't know what's the exact problem
java.lang.ArrayIndexOutOfBoundsException: 0 at com.codename1.ui.plaf.UIManager.initFirstTheme(UIManager.java:2156) at com.mycompany.myapp.MyApplication.init(MyApplication.java:33) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.codename1.impl.javase.Executor.run(Executor.java:308) at com.codename1.ui.Display.processSerialCalls(Display.java:1368) at com.codename1.ui.Display.mainEDTLoop(Display.java:1155) at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
在没有看到您的其余代码示例的情况下,我只能提供我能提供的答案。
我建议您最好调试代码并查看数组的内容,以及您的数组在循环中使用了多少次,或者在尝试获取之前检查它提取的数字index 元素并且它不超过数组中的内容数(记住它们从 0 开始而不是 1)。
示例:
// This will throw the same error, "ArrayIndexOutOfBoundsException"
String[] colours = ["red", "blue", "green"];
System.out.println(colours[3]); // This index does not exist, error throws
如果您正在使用循环(通常是罪魁祸首,因为循环太过分了),要避免此错误,可以考虑的替代方法是 for-each
循环!他们不会抛出这个错误,因为他们只处理可用的索引
String[] colours = ["red", "blue", "green"];
for (String colour : colours) {
System.out.println(colour);
}
如果您使用 .split(String)
之类的东西来创建数组,请事先进行检查
String colourList = "red.blue.green"; // 3 elements
String[] colours = colourList.split(".");
if (array.size == 3) {
// there is a 4th element
System.out.println(colours[3]);
} else {
// there is no 4th element
System.out.println(colours[2]);
}
您的主题文件丢失或损坏。我猜你是用旧方法创建的。我建议使用 https://start.codenameone.com/ 创建一个 maven 项目,这是创建 Codename One 应用程序的首选方式。请注意,它不再需要插件。
java.lang.ArrayIndexOutOfBoundsException: 0 at com.codename1.ui.plaf.UIManager.initFirstTheme(UIManager.java:2156) at com.mycompany.myapp.MyApplication.init(MyApplication.java:33) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.codename1.impl.javase.Executor.run(Executor.java:308) at com.codename1.ui.Display.processSerialCalls(Display.java:1368) at com.codename1.ui.Display.mainEDTLoop(Display.java:1155) at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
在没有看到您的其余代码示例的情况下,我只能提供我能提供的答案。
我建议您最好调试代码并查看数组的内容,以及您的数组在循环中使用了多少次,或者在尝试获取之前检查它提取的数字index 元素并且它不超过数组中的内容数(记住它们从 0 开始而不是 1)。
示例:
// This will throw the same error, "ArrayIndexOutOfBoundsException"
String[] colours = ["red", "blue", "green"];
System.out.println(colours[3]); // This index does not exist, error throws
如果您正在使用循环(通常是罪魁祸首,因为循环太过分了),要避免此错误,可以考虑的替代方法是 for-each
循环!他们不会抛出这个错误,因为他们只处理可用的索引
String[] colours = ["red", "blue", "green"];
for (String colour : colours) {
System.out.println(colour);
}
如果您使用 .split(String)
之类的东西来创建数组,请事先进行检查
String colourList = "red.blue.green"; // 3 elements
String[] colours = colourList.split(".");
if (array.size == 3) {
// there is a 4th element
System.out.println(colours[3]);
} else {
// there is no 4th element
System.out.println(colours[2]);
}
您的主题文件丢失或损坏。我猜你是用旧方法创建的。我建议使用 https://start.codenameone.com/ 创建一个 maven 项目,这是创建 Codename One 应用程序的首选方式。请注意,它不再需要插件。