按照网上示例写了下面这个Socket案例,但是运行不起来(IntelliJ IDEA 2017工具),代码如下:
package com.example.demo.RUNOOB.NetWorking;
import java.net.*;
import java.io.*;
public class GreetingServer extends Thread {
private ServerSocket serverSocket;
public GreetingServer(int port) throws IOException {
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(10000);
}
public void run() {
while(true) {
try {
System.out.println("等待远程连接,端口号为:" + serverSocket.getLocalPort() + "...");
Socket server = serverSocket.accept();
System.out.println("远程主机地址:" + server.getRemoteSocketAddress());
DataInputStream in = new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
DataOutputStream out = new DataOutputStream(server.getOutputStream());
out.writeUTF("谢谢连接我:" + server.getLocalSocketAddress() + "\nGoodbye!");
server.close();
}
catch (SocketTimeoutException s) {
System.out.println("Socket timed out!");
break;
}
catch (IOException e) {
e.printStackTrace();
break;
}
}
}
public static void main(String[] args) {
int port = Integer.parseInt(args[0]);
try {
Thread t = new GreetingServer(port);
t.run();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
错误报示:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at com.example.demo.RUNOOB.NetWorking.GreetingServer.main(GreetingServer.java:38)
经过细细检查,问题出在:int port = Integer.parseInt(args[0]);,这里调用了 args[0],所以在程序运行时必须提供参数输入,否则运行报错。
解决方法:
1.IntelliJ IDEA:选择 Edit Configurations...,在 configuration 选项卡中找到 Program arguments 输入一个值,例如:6066,点击 OK 按钮,再次运行就不会报错了。
2.Eclipse:对该类进行右击选择 Run as -> Run configurations,再选择“Arguments”部分,输入参数。
本文介绍了在使用Java Socket编程时遇到的'Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0'错误,该错误源于在运行时未提供必要的参数。解决方法包括在IntelliJ IDEA和Eclipse中设置Program arguments以避免运行时错误。

329

被折叠的 条评论
为什么被折叠?



