Java-CONTINUATION FROM:35581167-EOF尝试通过ObjectInputStream.readObject()接收图像图标时发生异常

Java-CONTINUATION FROM:35581167-EOF尝试通过ObjectInputStream.readObject()接收图像图标时发生异常,java,object,server,client,imageicon,Java,Object,Server,Client,Imageicon,这是上一个问题的延续:35581167 测试之前的信息仍然通过writeObject()发送,但当程序到达第一个图像图标的readObject()时,我收到以下错误消息: Exception in thread "main" java.io.EOFException at java.io.DataInputStream.readInt(Unknown Source) at java.io.ObjectInputStream$BlockDataInputStream.readInt(Unknown

这是上一个问题的延续:35581167

测试之前的信息仍然通过
writeObject()
发送,但当程序到达第一个图像图标的
readObject()
时,我收到以下错误消息:

Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readInt(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readInt(Unknown Source)
at java.io.ObjectInputStream.readInt(Unknown Source)
at javax.swing.ImageIcon.readObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at AuctionClient.retrieveItemInformation(AuctionClient.java:378)
at AuctionClient.main(AuctionClient.java:356)
这是每个部分的更改代码:

服务器线程代码已更新:

public ClientHandler(Socket socket, BiddingItem item1, BiddingItem item2, int number) throws IOException
{
    client = socket;
    output = new ObjectOutputStream(client.getOutputStream());
    input = new ObjectInputStream(client.getInputStream());
    startedItem1 = item1;
    startedItem2 = item2;
    clientNumber = number;
}
向客户端发送信息:

public void run()
{
    //previous code..
    try
    {
        output.writeObject(clientNumber);

        output.writeObject(Integer.toString(startedItem1.getCode()));
        output.writeObject(startedItem1.getDescription());
        output.writeObject(startedItem1.getDeadlineString());
        output.writeObject(startedItem1.getCurrentPrice());

        output.writeObject(Integer.toString(startedItem2.getCode()));
        output.writeObject(startedItem2.getDescription());
        output.writeObject(startedItem2.getDeadlineString());
        output.writeObject(startedItem2.getCurrentPrice());

        output.writeObject(startedItem1.getImage());
        output.writeObject(startedItem2.getImage());
    }
    catch(IOException IOEx)
    {
        System.out.println("Unable to send information!");
    }
    //code continues...
}
正在创建输入流的客户端:

public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException 
{
    //previous code...
    try
    {
        txtBoxServerMessage.setText("CLIENT: Attempting to connect to server...");
        Thread.sleep(2000);
        socket = new Socket(host, PORT);

        inputFromServer = new ObjectInputStream(socket.getInputStream());
        outputToServer = new ObjectOutputStream(socket.getOutputStream());
    }
    catch(IOException ioEx)
    {
        txtBoxServerMessage.setText("CLIENT-ERROR: Unable to connect to server! Exiting...");
        Thread.sleep(2000);
        System.exit(1);
    }
//code continues...
}
客户端用于接受信息的函数:

private static void retrieveItemInformation() throws InterruptedException, ClassNotFoundException, IOException
{
    txtBoxServerMessage.setText("CLIENT: Waiting for Item Information...");
    Thread.sleep(3000);

    clientNumber = (int) inputFromServer.readObject();

    item1Code = (String) inputFromServer.readObject();
    item1Desc = (String) inputFromServer.readObject();
    item1Deadline = (String) inputFromServer.readObject();
    item1AuctionValue = (double) inputFromServer.readObject();

    item2Code = (String) inputFromServer.readObject();
    item2Desc = (String) inputFromServer.readObject();
    item2Deadline = (String) inputFromServer.readObject();
    item2AuctionValue = (double) inputFromServer.readObject();

    item1Image = (ImageIcon) inputFromServer.readObject(); // READING IMAGE 1 = LINE 378
    item2Image = (ImageIcon) inputFromServer.readObject(); // READING IMAGE 2

    txtBoxServerMessage.setText("DEBUG: FINISHED IMAGE");
    txtBoxServerMessage.setText("CLIENT: Information Recieved! Displaying...");
    Thread.sleep(1000);
    comboItemSelect.addItem(item1Code);
    comboItemSelect.addItem(item2Code);
    txtBoxClientNumber.setText(String.valueOf(clientNumber));

    updateDisplay();

}

堆栈跟踪显示错误发生在AuctionClient.java的第378行。这是哪一行代码?抱歉,我应该包括这一行,第378行是带有注释//读取图像1的行,您确定您的客户端没有引发异常吗?用
IOEx.printStackTrace()替换System.out.println
抛出新的运行时异常(“无法发送信息:”+IOEx,IOEx)
。将其更改为IOEx.printStackTrace(),现在服务器抛出一个错误,表示其无法加载图像内容,毫无疑问,它已进入EOF,因为服务器无法加载图像以通过输出流实际发送它,我将玩一玩图像创建,看看我能找到什么,谢谢您的帮助!整理好了!我没有正确初始化图像图标,问题解决了,再次感谢@VGR