Java 新手到处都是空指针

Java 新手到处都是空指针,java,null,smtp,null-pointer,Java,Null,Smtp,Null Pointer,所以我尝试从头开始创建一个smtp,(赋值),并尝试将类连接在一起,但不幸的是失败了,尝试了一切。编译器不会抛出任何错误,但当我运行它时,我并没有走多远。我尝试用.start线程调用其他类,但仍然失败 如果你能帮我或给我一些建议,我会非常感激 //问题似乎就在这里:我不知道如何纠正它 socketManager soketManager = null; DataInputStream clientDataIn = new DataInputStream(soketManager.

所以我尝试从头开始创建一个smtp,(赋值),并尝试将类连接在一起,但不幸的是失败了,尝试了一切。编译器不会抛出任何错误,但当我运行它时,我并没有走多远。我尝试用.start线程调用其他类,但仍然失败

如果你能帮我或给我一些建议,我会非常感激

//问题似乎就在这里:我不知道如何纠正它

   socketManager soketManager = null;
   DataInputStream clientDataIn = new   DataInputStream(soketManager.getInputStream());
    socketManager clientReaderSocket = soketManager;```
    public class socketManager {
    public Socket soc = null;`
`

}

线程“thread-1”java.lang.NullPointerException中的异常位于 me.censtered.loopback.SMTPclient.Client$ClientSocketManager.run(Client.java:117) 位于java.base/java.lang.Thread.run(Thread.java:834)

//Main方法:-在运行类文件时调用。
公共静态void main(字符串[]args)抛出UnknownHostException、IOException{
港口申报和检查。
字符串serverIP=“环回”;
int defaultServerPort=25;
PortManager portManage=新的PortManager();
线程portmanager读取=新线程(portManage);
portmanagerRead.start();
}//干管末端
静态公共类PortManager实现可运行{
扫描仪用户输入=新扫描仪(System.in);
int serverPort=25;
//在多次尝试端口后,将只接受自(2019)起的tcp/udp端口
//将自动选择为默认值25,
//我们应该接受解析的十六进制吗?
布尔端口完成=假;
短端口TriesCenter=1;
公开募捐{
试一试{
做{
//在客户端启动时向用户请求服务器端口。
System.out.println(“请输入服务器所在的端口”);
字符串userEntry=userInput.nextLine();
userInput.close();
试一试{
serverPort=Integer.parseInt(userEntry);
如果(PortTriesCenter!=5){//部分重试超时。
如果(serverPort!=0){//“Port Zero”不正式存在。它被定义为无效端口
//港口
//但有效的互联网数据包可以形成并“通过”发送
//
//“电线”
//与任何其他端口一样,往返于“端口0”。

如果((serverPort>0&&serverPort=1024&&serverPort=49152&&serverPort您已在ClientSocketManager中定义了
socketManager=null;
)。 但是您从未给它赋值,因此它仍然是
null

之后的代码试图从中访问流,这会引发
NullPointerException

         DataInputStream clientDataIn = new DataInputStream(soketManager.getInputStream());
         socketManager clientReaderSocket = soketManager;

         DataOutputStream clientDataOut;
         clientDataOut = new DataOutputStream(soketManager.getOutputStream());

         String sendSocketMessage = (CRLF);
         clientDataOut.writeUTF(sendSocketMessage);// Sends string to output stream using UTF-8
         clientDataOut.flush();
         System.out.println("DEBUG 1");

只需创建一个新的
socketManager
实例,并在使用它之前将其分配给
soketManager

PortManager portInstance = new PortManager();
int portNumber = portInstance.serverPort;
Socket soket = new Socket("loopback", portNumber);

socketManager soketManager = new sockerManager(soket);

我主要是在寻找改进上述代码的技巧。请不要将此标记为关闭:(我已经阅读了空指针指南..但我没有足够的知识或技能来理解所有内容,至少需要告诉我们哪一行是第117行。另外,
socketManager soketManager=null;soketManager.getInputStream()
显然会爆炸..第117行是“DataInputStream clientDataIn”@Ken Y-N我不知道用另一种方式填充它…我怎么做?请提供一个很好的例子?我不知道什么是
socketManager
类,但你可以这样做。而不是分配
null
=>
socketManager=new socketManager();
``公共socketManager()(套接字套接字)抛出IOException{soc=Socket;input=newDataInputStream(soc.getInputStream());output=newDataOutputStream(soc.getOutputStream());}````
         DataInputStream clientDataIn = new DataInputStream(soketManager.getInputStream());
         socketManager clientReaderSocket = soketManager;

         DataOutputStream clientDataOut;
         clientDataOut = new DataOutputStream(soketManager.getOutputStream());

         String sendSocketMessage = (CRLF);
         clientDataOut.writeUTF(sendSocketMessage);// Sends string to output stream using UTF-8
         clientDataOut.flush();
         System.out.println("DEBUG 1");

PortManager portInstance = new PortManager();
int portNumber = portInstance.serverPort;
Socket soket = new Socket("loopback", portNumber);

socketManager soketManager = new sockerManager(soket);