Javaのサーバー/クライアントプロジェクトでは、プログラムの実行中のいつでもクライアントが詳細を要求できます一意のIDに関連し、サーバーは関連する一連の詳細を返します。これはsocket.getOutputStream
にアクセスするオブジェクトPrintWriter
によって行われ、正常に動作します。Java - ObjectOutputStreamを介したImageIconの送信は初めてですが、それ以降ではありません
私はまた、サーバーからクライアントへのイメージの送受信を含めようとしており、プログラムからいくつかの非常に奇妙な動作に出会ったことがあります。送信および画像を受信
方法を以下に示す:
サーバ側:
//send image associated with item
//through ObjectOutputStream to client
private void sendItemImage(BidItem item)
{
try
{
//wrap object output stream around
//output stream to client at this socket
ObjectOutputStream imageOutput =
new ObjectOutputStream(client.getOutputStream());
//send image object to client
imageOutput.writeObject(item.getItemImage());
}
catch (IOException ioEx)
{
//alert server console
System.out.println("\nUnable to send image for item "
+ item.getItemCode() + " to "
+ bidderName + "!");
//no exit from system
//bidding can still continue
}
}
クライアント側:
//to be displayed on GUI
private static void receiveItemImage()
{
try
{
//wrap ObjectInputStream around socket
//to receive objects sent from server
ObjectInputStream imageInput =
new ObjectInputStream(socket.getInputStream());
//read in image and store in ImageIcon instance
image = (ImageIcon) imageInput.readObject();
//re-create label object to be blank
imageLabel = new JLabel();
//remove label containing last image
imagePanel.remove(imageLabel);
//just ignores command if it does not already contain image
//apply image to label
imageLabel.setIcon(image);
//apply image to CENTER of panel
imagePanel.add(imageLabel, BorderLayout.CENTER);
}
//problem in input stream
catch (IOException ioEx)
{
//alert user
JOptionPane.showMessageDialog(
null, "Error receiving image!");
//allow system to continue
//no exit
}
//problem casting to ImageIcon type
catch (ClassNotFoundException cnfEx)
{
//alert user
JOptionPane.showMessageDialog(
null, "Error converting Object to ImageIcon!");
//allow system to continue
//no exit
}
}
したがって、各時間要求がありますsocket.getOutputStream
/socket.getInputStream
を使用して、画像の通過を処理するためにObjectOutpuStream
とObjectInputStream
が作成されます。
これらのメソッドは、クライアントがサーバーに接続するときに最初に呼び出され、最初のイメージと一連の詳細が自動的に送信されます。これはうまくいきますが、プログラム全体で画像を要求するとその後の試みではcatch (IOException)
句が満たされ、上記のエラーメッセージが表示されます。
私の人生のために私はなぜこれが初めてではなく、これ以後にはうまくいかないのか分かりません。誰かが正しい方向に私を指すことができれば、それは素晴らしいだろう!
おかげで、 マーク
'JOptionPane.showMessageDialog()'の直前にスタックトレースを追加できます: 'ioEx.printStackTrace (); '? – Saheed