我正在学习通过使用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超出范围
请问如何解决?这真是令人困惑...
答案 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,则可以通过以下方式配置参数: