1

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

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() 调用失败(例如,如果打开了太多套接字),那么这是否意味着我不能在代码中使用它?我该如何处理这样的情况。?

4

1 回答 1

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 异常),或者在打印异常后不要“盲目地”继续(例如,打印并返回)。

于 2013-07-27T08:37:46.027 回答