日期:2024年6月24日
编辑器:IDEA
语言:Java
问题描述
在new String()
时自动导入了import com.sun.org.apache.xpath.internal.operations.String;
导致main
函数无法运行。
原代码:
import com.sun.org.apache.xpath.internal.operations.String;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception{
//1.创建Socket对象,连接服务器端,需要指定服务器端的IP地址和端口号
Socket socket = new Socket("127.0.0.1",8888);
//打开连接到Socket的输入/输出流,使用getOutputStream()和getInputStream()
//2.获取输出流
OutputStream output = socket.getOutputStream();
//发送数据
output.write("lalala".getBytes());
//关闭输出通道,对方才能读到流末尾标记
socket.shutdownOutput();
//3.获取输入流
InputStream input = socket.getInputStream();
//接收数据
byte[] data = new byte[1024];
StringBuilder sb = new StringBuilder();
int len;
while ((len = input.read(data)) != -1){
sb.append(new String(data,0,len)); //'导错String包'
}
System.out.println("服务器端返回的消息是:" + sb);
//4.关闭Socket,不再与服务器端通信
input.close();
output.close();
socket.close();
}
}
原因分析:
自动导入的类String包和JDKString 产生冲突,导致该测试类中只要用到
java.lang.String
的位置都产生错误,JVM无法分辨,继续工作,导致main函数无法运行。
解决方案:
1.删除
import com.sun.org.apache.xpath.internal.operations.String;
;
2.new String()
改为new java.lang.String()
。
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception{
//1.创建Socket对象,连接服务器端,需要指定服务器端的IP地址和端口号
Socket socket = new Socket("127.0.0.1",8888);
//打开连接到Socket的输入/输出流,使用getOutputStream()和getInputStream()
//2.获取输出流
OutputStream output = socket.getOutputStream();
//发送数据
output.write("lalala".getBytes());
//关闭输出通道,对方才能读到流末尾标记
socket.shutdownOutput();
//3.获取输入流
InputStream input = socket.getInputStream();
//接收数据
byte[] data = new byte[1024];
StringBuilder sb = new StringBuilder();
int len;
while ((len = input.read(data)) != -1){
sb.append(new java.lang.String(data,0,len)); //修改后
}
System.out.println("服务器端返回的消息是:" + sb);
//4.关闭Socket,不再与服务器端通信
input.close();
output.close();
socket.close();
}
}