我想創建一個小型應用程序,可以通過套接字發送文本日誌。當套接字被接受時,該套接字的輸入流將被存儲在像這樣的HashMap中。如何讀取相同的輸入流兩次,而沒有輸入流停止工作
private HashMap<Integer,InputStream> allinputsstreams = new
HashMap<Integer,InputStream>();
之後,我將創建一個新的JFrame對於當前的InputStream
public LogListener(int socketid, SocketListener socketlistener, Gui gui) {
this.socketid = socketid;
this.gui = gui;
this.inputstream = socketlistener.getClient(socketid);
JFrame frame = new JFrame("Log listener");
frame.setLocationRelativeTo(null);
frame.setPreferredSize(new Dimension(framewidth,frameheight));
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
logarea = new JTextArea();
frame.add(logarea);
frame.pack();
frame.setVisible(true);
frame.addWindowListener(this);
listenthread = new Thread(this);
listenthread.start();
}
然後我用的InputStream從列表中接收數據,並把它寫在JFrame的
public void run() {
input = new DataInputStream(inputstream);
while(!formclosed) {
try {
String addtext = input.readUTF();
addtext = formatText(addtext);
logarea.setText(logarea.getText() + addtext);
} catch (EOFException e) {
System.out.println("Looks like the client has been closed.");
return;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
這適用於接收1個JFrame上的數據,但是一旦我打開2個JFrames(意思是打開兩次相同的輸入流),那麼沒有任何輸入流再起作用。我期待至少有1個inputstream仍然可以工作。
你是什麼意思「沒有輸入流工作」?你有例外嗎?僵局?還有別的嗎? –
我沒有得到任何異常,但是當我打開它時發送數據並將其寫入JFrame(這是我想要的),但是當我打開另一個(打開輸入流兩次)時,沒有任何輸入流發送我需要的數據 – Rvdrichard
不是輸入流綁定到單獨的套接字嗎?你爲什麼要讀兩次相同的輸入流? –