当前位置: 首页 > 知识库问答 >
问题:

为什么我要获得IndexOutOfBoundsException?[副本]

凌蕴藉
2023-03-14

我试图在Java做简单的聊天应用程序,但我得到这个错误。怎么了?我该怎么修好它?for循环中有一些错误?

我得到这个错误

线程“main”java.lang.IndexOutoFboundsException:索引0超出长度0的界限,位于java.base/jdk.internal.util.preconditions.OutoFbounds(preconditions.java:64)位于java.base/jdk.internal.util.preconditions.OutoFboundscheckindex(preconditions.java:70)位于java.base/jdk.internal.util.preconditions.CheckIndex(preconditions.java:248)位于

package zad1;


import java.io.*;
import java.nio.file.*;
import java.util.*;
import java.util.concurrent.*;

public class Main {

  public static void main(String[] args) throws Exception {
    String testFileName = System.getProperty("user.home") + "/ChatTest.txt";
    List<String> test = Files.readAllLines(Paths.get(testFileName));
    String host = test.remove(0);
    int port = Integer.valueOf(test.remove(0));
    ChatServer s = new ChatServer(host, port);
    s.startServer();

    ExecutorService es = Executors.newCachedThreadPool();
    List<ChatClientTask> ctasks = new ArrayList<>();

    for (String line : test) {
      String[] elts = line.split("\t");
      String id = elts[0];
      int wait = Integer.valueOf(elts[1]);
      List<String> msgs = new ArrayList<>();
      for (int i = 2; i < elts.length; i++) msgs.add(elts[i] + ", mĂłwiÄ™ ja, " +id);
      ChatClient c = new ChatClient(host, port, id);
      ChatClientTask ctask = ChatClientTask.create(c, msgs, wait);
      ctasks.add(ctask);
      es.execute(ctask);
    }
    ctasks.forEach( task -> {
      try {
        task.get();
      } catch (InterruptedException | ExecutionException exc) {
        System.out.println("*** " + exc);
      }
    });
    es.shutdown();
    s.stopServer();

    System.out.println("\n=== Server log ===");
    System.out.println(s.getServerLog());

    ctasks.forEach(t -> System.out.println(t.getClient().getChatView()));
  }
}

共有1个答案

蓟清野
2023-03-14

我可以准确地理解抛出异常的点,因为您在代码中没有显示行号。
乍一看,应该在此处抛出异常:

String host = test.remove(0);
int port = Integer.valueOf(test.remove(0));

在我看来,除非您确信您总是从chattest.txt文件中获得两行,否则其中一行总是会引发异常,因为files.readalllines(paths.get(testFileName));语句很可能返回一个只有一个元素的列表,而您正在尝试获得两个元素。
希望有帮助,否则,请分享更多信息,我将尝试进一步帮助您。

 类似资料:
  • 这是我的代码: 这是android文档中给出的默认值。我只是改了网址。 这是我的错误消息: java.lang.StringIndexOutOfBoundsException:长度=28;RegionStart=1;RegionLength=499在java.lang.String.SubString(String.java:1931)在com.example.my.app.MainActivit

  • 谁能告诉我为什么吗?类的构造函数是,但是编译器仍然声称找不到它的构造函数。

  • 我收到的错误: 这是我的代码 我尝试了几种不同的方法来读取此文件,但我无法弄清楚为什么会发生这种情况。我使用的扩展名.rtf,.txt,认为这可能是文件本身的问题。该文件仅包含以下内容:

  • 我读过List.of和Arrays.AsList之间的区别是什么? 我不明白的是,在我的Maven pom.xml中进行了一些依赖项升级之后,为什么我的所有 不再编译。当我在IntelliJ中键入时,autocomplete只会出现成员。我想也许我没有导入?所以显式地指定了它,但仍然: 为什么我好像不能用?我一定是在做傻事...

  • 我有一个arraylist,其中添加了以下数字。 然后我使用下面的代码遍历列表并在打印前求和。 它正在打印出一个值6。有人知道发生了什么吗?或者有人能解释我在这里做错了什么吗?感谢您的时间,如果有什么我可以补充澄清的,请不要犹豫。