我正在使用Java开发一个小型服务器应用程序。所以,我从不同的客户端获取信息,如果信息进来,则调用以下方法:
public void writeToArray(String data) {
data = trim(data);
String[] netInput = new String[5];
netInput[0]="a";
netInput[1]="a";
netInput[2]="a";
netInput[3]="a";
netInput[4]="a";
netInput = split(data, ",");
pos_arr = PApplet.parseInt(netInput[0]);
rohr_value = PApplet.parseInt(netInput[1]); // THIS LINE KICKS OUT THE ERROR.
if(pos_arr >0 && pos_arr<100) {
fernrohre[pos_arr] = rohr_value;
println("pos arr length: " + fernrohre[pos_arr]);
println("pos arr: " + pos_arr);
}
OS X上的控制台给出了以下错误:
Exception in thread "Animation Thread"
java.lang.ArrayIndexOutOfBoundsException:1
at server_app.writeToArray(server_app.java:108) at server_app.draw(server_app.java:97)
at processing.core.PApplet.handleDraw(PApplet.java:1606)
at processing.core.PApplet.run(PApplet.java:1503)
at java.lang.Thread.run(Thread.java:637)
如您所见,我尝试使用至少5个条目填充数组netInput,因此不会出现ArrayIndexOutOfBoundsException。
我不明白,我很感谢你的帮助!
如果我能抓住错误并继续使用该应用程序,那对我来说已经有用了。
答案 0 :(得分:10)
你把5个字符串放入数组中,但是用这一行撤消你所有的好工作;
netInput = split(data, ",");
data
显然没有任何逗号。
答案 1 :(得分:2)
<强>更新强>
split()
方法是自定义的,而不是String.split
。它也需要检查,看看出了什么问题。感谢@Carlos将其指出。
原始答案
考虑这一行:
netInput = split(data, ",");
这将使用逗号分隔data
字符串作为分隔符。它将返回一个(逗号数+ 1)结果元素的数组。如果您的字符串没有逗号,您将获得单个元素数组。
显然,您的输入字符串没有任何逗号。这将导致单个元素数组(第一个元素,即index = 0将是字符串本身)。因此,当您尝试索引第二个元素(index = 1)时,它会引发异常。
答案 2 :(得分:2)
在这一行
netInput = split(data, ",");
您的阵列正在重新初始化。你的split
方法可能返回一个只有1个元素的数组(我猜这个数据字符串不包含任何“,”)。
答案 3 :(得分:1)
你做
netInput = split(data, ",")
;
和
split(data,“,”);
returns one element array
答案 4 :(得分:1)
您在调用netInput
方法时重新分配split()
变量。
新值的数组可能没有5。
您能提供split()
方法的来源吗?
答案 5 :(得分:1)
你需要一些防御性代码,
if(netInput.length > 1)
pos_arr = PApplet.parseInt(netInput[0]);
rohr_value = PApplet.parseInt(netInput[1]);