我真的看不出错误在哪里。
我已经为 textAreaTop 组件设置了一个 KeyListener,因此每次按下某个键时,都会将一个字符串发送到服务器,服务器将其回显给 teaxtAreaBottom 组件。我知道 stdIn 尚未被使用。
当按下第一个键时,会建立连接,但是当按下第二个键时,我收到以下错误:无法获取连接到本地主机的 I/O。此外,没有任何内容附加到 textAreaBottom 组件。
//客户端
@Override
public void keyPressed(KeyEvent e) {
String hostName = "localhost";
int portNumber = 4000;
try (Socket echoSocket = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(echoSocket.getOutputStream(),
true);
BufferedReader in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in))) {
String userInput = textAreaTop.getText();
out.println(userInput);
textAreaBottom.setText(null);
textAreaBottom.setText(in.readLine());
} catch (UnknownHostException ex) {
System.err.println("Don't know about host " + hostName);
System.exit(1);
} catch (IOException ex) {
System.err.println("Couldn't get I/O for the connection to "
+ hostName);
System.exit(1);
}
}
//服务器
public static void main(String[] args) throws IOException {
int portNumber = 4000;
try {
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
System.out.println("connection accepted");
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),
true);
BufferedReader in = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
{
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
}
}
} catch (IOException e) {
System.out
.println("Exception caught when trying to listen on port "
+ portNumber + " or listening for a connection");
System.out.println(e.getMessage());
}
}
如有任何建议,我们将不胜感激。
谢谢
最佳答案
这个问题是由于两个小缺陷造成的:
您应该实现
keyReleased()
而不是keyPressed()
,因为textAreaTop
中的文本将在keyPressed()
被调用。因此,当调用keyReleased()
方法时,您的textAreaTop
拥有您输入的最新文本。您不应该在每次按键时都创建该
Socket
对象。您应该定义该Socket
以及对keyReleased
(以前的keyPressed)的输入/输出Streams
外部的引用匿名类和方法。因此,每次按下按键时,唯一要做的工作就是从textAreaTop
和out.println(text)
获取文本到服务器。在本例中,我已经测试了代码并且它工作正常。
祝你好运。
关于java - 尝试从 JTextArea 回显文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31226171/