Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java初始化流输入/输出的变量_Java_Objectinputstream_Datainputstream - Fatal编程技术网

java初始化流输入/输出的变量

java初始化流输入/输出的变量,java,objectinputstream,datainputstream,Java,Objectinputstream,Datainputstream,我对下面的代码有问题。不清楚如何初始化in/out的变量 在创建此对象的过程中,程序在构造函数中挂起。它挂在this.inObjects=newobjectin………的行上。我只想创建一次这些in/out对象,通过在方法中调用它们并应用read-write等,来读取和写入输入/输出、字符串和对象 我哪里做错了?有没有可能因为没有接收数据而挂起?他们不应该,对吗 public class PokerClient { private PokerClientGui gui; priv

我对下面的代码有问题。不清楚如何初始化in/out的变量

在创建此对象的过程中,程序在构造函数中挂起。它挂在this.inObjects=newobjectin………的行上。我只想创建一次这些in/out对象,通过在方法中调用它们并应用read-write等,来读取和写入输入/输出、字符串和对象

我哪里做错了?有没有可能因为没有接收数据而挂起?他们不应该,对吗

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)
        {
        }
}

交换两行,即使用以下顺序:

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

OIS的构造函数等待某些头,您必须先发送,否则它总是阻塞。

交换两行,即使用以下顺序:

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

OIS的构造函数等待某个头,您必须先发送,否则它总是阻塞。

您应该始终首先创建对象输出流并刷新它。您不应该以两种不同的方式包装同一个流。永远不要捕捉异常并忽略它,除非你喜欢有错误并且没有办法确定哪里出了问题。不要给自己分配一个字段,这不会做任何有用的事情,它只会让人困惑

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());
  }
}

您应该始终首先创建对象输出流并刷新它。您不应该以两种不同的方式包装同一个流。永远不要捕捉异常并忽略它,除非你喜欢有错误并且没有办法确定哪里出了问题。不要给自己分配一个字段,这不会做任何有用的事情,它只会让人困惑

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());
  }
}

我试图交换,但它再次挂起。。。相反,如果我评论所有行它的作品。。。如果我只留下第一个:this.in=newdataInputStream(this.clientSocket.getInputStream());它运行正常。。。。。。这是因为我在程序的这一部分不发送或接收任何东西吗?DataInputStream没有问题,只有ObjectInputStream块,因为它需要一些输入。使用调试器或一些打印来找出它挂起的位置。我对我写的东西很确定,因为我自己也遇到了这个问题,你可以在Javadoc的某个地方找到它<代码>接口对象输入扩展数据输入。但是,我不认为这会在您的示例中造成问题。+0:您说“您必须先发送”,但您的示例创建了第二个发送者。这难道不令人困惑吗?可能是这样,但否则我可以写“交换两行”。我会换的。我试着换,但它又挂了。。。相反,如果我评论所有行它的作品。。。如果我只留下第一个:this.in=newdataInputStream(this.clientSocket.getInputStream());它运行正常。。。。。。这是因为我在程序的这一部分不发送或接收任何东西吗?DataInputStream没有问题,只有ObjectInputStream块,因为它需要一些输入。使用调试器或一些打印来找出它挂起的位置。我对我写的东西很确定,因为我自己也遇到了这个问题,你可以在Javadoc的某个地方找到它<代码>接口对象输入扩展数据输入。但是,我不认为这会在您的示例中造成问题。+0:您说“您必须先发送”,但您的示例创建了第二个发送者。这难道不令人困惑吗?可能是这样,但否则我可以写“交换两行”。我来换。谢谢!(很抱歉字段自动分配)我将尝试删除此项!谢谢!(很抱歉字段自动分配)我将尝试删除此项!