如何解决错误java.lang.ArrayIndexOutOfBoundsException?

时间:2019-07-01 18:34:10

标签: java

我正在学习通过使用Glassfish服务器为客户端和服务器系统编写Java网络编程代码。

我已经通过GS创建了一个本地主机服务器。下面是我从github复制的代码。

import java.net.*;
import java.io.*;

public class GreetingClient
{
   public static void main(String [] args)
   {
      String serverName = args[0];
      int port = Integer.parseInt(args[1]);
      try
      {
         System.out.println("Connecting to " + serverName +
         " on port " + port);
         Socket client = new Socket(serverName, port);
         System.out.println("Just connected to " 
         + client.getRemoteSocketAddress());
         OutputStream outToServer = client.getOutputStream();
         DataOutputStream out = new DataOutputStream(outToServer);
         out.writeUTF("Hello from "
                      + client.getLocalSocketAddress());
         InputStream inFromServer = client.getInputStream();
         DataInputStream in =
                        new DataInputStream(inFromServer);
         System.out.println("Server says " + in.readUTF());
         client.close();
      }catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

每次运行代码时,都会显示错误

线程“ main”中的异常java.lang.ArrayIndexOutOfBoundsException:索引0的长度为0超出范围

请问如何解决?这真是令人困惑...

4 个答案:

答案 0 :(得分:2)

您的应用程序期望服务器名称和端口使用两个命令行参数。

   String serverName = args[0];
   int port = Integer.parseInt(args[1]);

例如,如果GlassFish服务器在端口8080上的本地主机上运行,​​则可以使用以下参数运行客户端应用程序

   java GreetingClient localhost 8080

答案 1 :(得分:1)

args包含命令行参数。如果您运行不带任何参数的应用程序,则此数组为空,并且当您尝试获取元素args[0]时,会出现此异常。

要解决此问题,您应该在访问数组之前检查数组是否包含元素, 或在命令行中传递参数:java MyApp firstParam secondParam

答案 2 :(得分:0)

您必须通过命令行参数启动应用程序,它们将填充args数组。通常,好的应用程序在使用它们之前会检查参数是否存在,通常将有关可用参数和强制性参数的一些指南重新发布给用户。

答案 3 :(得分:0)

正如其他人所说,您的程序期望将参数传递给它。

如果使用的是诸如Eclipse之类的IDE,则可以通过以下方式配置参数:

  1. 导航至顶部菜单上的运行
  2. 选择运行配置
  3. 选择左侧的 Java应用程序,然后选择正确的应用程序。
  4. 点击顶部第二个名为 Arguments 的标签。
  5. 在每次运行该程序时将要传递的参数写到程序参数框中。
  6. 单击“应用”。现在,每次在Eclipse中运行此程序时,它将使用这些参数。