我想创建一个小型应用程序,可以通过套接字发送文本日志。当套接字被接受时,该套接字的输入流将被存储在像这样的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
不是输入流绑定到单独的套接字吗?你为什么要读两次相同的输入流? –