socket() - 错误:可能尚未初始化变量客户端

时间:2013-07-27 08:32:48

标签: java

我写了一个非常简单的客户端程序

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

public class GreetingClient
{
   private Socket cSocket;

   public GreetingClient() throws IOException
   {
        String serverName = "127.0.0.1";
        int port = 5063;
        cSocket = new Socket(serverName,port);
   }


   public static void main(String [] args)
   {
      GreetingClient client;
      try
      {
          client = new GreetingClient();
      }
      catch(IOException e)
      {
          e.printStackTrace();
      }

      while (true)
      {
        try
        {
                InputStream inFromServer = client.cSocket.getInputStream();
                DataInputStream in = new DataInputStream(inFromServer);

                System.out.println("Server says " + in.readUTF());
        }
        catch(IOException e)
        {
                e.printStackTrace();
        }
      }
   }
}

当我编译这个程序时,我得到错误

GreetingClient.java:33: error: variable client might not have been initialized
            InputStream inFromServer = client.cSocket.getInputStream();
                                       ^
1 error

这个错误是什么意思?如果新的Socket()调用失败(例如,如果打开了太多的套接字)那么这是否意味着我不能在代码中使用它?我该如何处理情况 像这样。?

1 个答案:

答案 0 :(得分:4)

try
{
    client = new GreetingClient();  // Sets client OR throws an exception
}
catch(IOException e)
{
    e.printStackTrace();            // If exception print it
                                    // and continue happily with `client` unset 
}

稍后你正在使用;

// Use `client`, whether set or not.
InputStream inFromServer = client.cSocket.getInputStream();

要解决此问题,请将客户端设置为null声明它(可能在以后使用时导致nullref异常),或者在打印异常后不要“盲目地”继续(例如,打印和返回)。