переменная инициализации Java для входного / выходного потока - PullRequest
0 голосов
/ 06 февраля 2011

У меня проблема с кодом ниже.Не ясно, как я могу инициализировать переменные in / out.

Во время создания этого объекта программа зависает в конструкторе.Он висит на линии this.inObjects = new ObjectIn..........Я хотел бы создать эти входящие / исходящие объекты только для чтения и записи на входе / выходе, строках и объектах, просто вызывая их в методах и применяя чтение, запись и т. Д. И т. Д.

Куда я иду неправильно?Возможно ли, что не получая данные, они зависают?Они не должны, верно?

public class PokerClient 
{
    private PokerClientGui gui;
    private Socket clientSocket;
    private DataInputStream in;
    private DataOutputStream output;
    private ObjectInputStream inObjects;
    private ObjectOutputStream outObjects;
    private Hand hand;

    //constructor
    public PokerClient()
    {
        try
        {
            this.gui= gui;
            this.clientSocket = new Socket("localhost", 4444);
            this.in = new DataInputStream(this.clientSocket.getInputStream());
            this.inObjects = new ObjectInputStream(this.clientSocket.getInputStream());
            this.output = new DataOutputStream(this.clientSocket.getOutputStream());
            this.outObjects = new ObjectOutputStream(this.clientSocket.getOutputStream());
        }
        catch (Exception e)
        {
        }
}

Ответы [ 2 ]

2 голосов
/ 06 февраля 2011

Вы всегда должны сначала создавать поток вывода объекта и очищать его.Вы никогда не должны оборачивать один и тот же поток двумя разными способами.Никогда не ловите исключение и игнорируйте его, если вам не нравятся ошибки и нет способа определить, что пошло не так.Не назначайте себе поле, это не принесет ничего полезного, оно просто запутает людей.

public class PokerClient {
  private final PokerClientGui gui;
  private final Socket clientSocket;
  private final ObjectOutputStream outObjects;
  private final ObjectInputStream inObjects;

  public PokerClient(PokerClientGui gui) throws IOException {
    this.gui = gui;
    clientSocket = new Socket("localhost", 4444);
    outObjects = new ObjectOutputStream(clientSocket.getOutputStream());
    outObjects.flush();
    inObjects = new ObjectInputStream(clientSocket.getInputStream());
  }
}
1 голос
/ 06 февраля 2011

Поменяйте местами две строки, т.е. используйте этот порядок:

this.outObjects = new ObjectOutputStream(this.clientSocket.getOutputStream());
this.inObjects = new ObjectInputStream(this.clientSocket.getInputStream());

Конструктор OIS ожидает некоторый заголовок, который нужно отправить первым, иначе он всегда блокируется.

...