gpt4 book ai didi

java - 尝试从 JTextArea 回显文本

转载 作者:行者123 更新时间:2023-11-30 08:05:13 25 4
gpt4 key购买 nike

我真的看不出错误在哪里。

我已经为 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());
}
}

如有任何建议,我们将不胜感激。

谢谢

最佳答案

这个问题是由于两个小缺陷造成的:

  1. 您应该实现 keyReleased() 而不是 keyPressed(),因为 textAreaTop 中的文本将在 keyPressed() 被调用。因此,当调用 keyReleased() 方法时,您的 textAreaTop 拥有您输入的最新文本。

  2. 您不应该在每次按键时都创建该 Socket 对象。您应该定义该Socket以及对keyReleased(以前的keyPressed)的输入/输出Streams外部的引用匿名类和方法。因此,每次按下按键时,唯一要做的工作就是从 textAreaTopout.println(text) 获取文本到服务器。在本例中,我已经测试了代码并且它工作正常。

祝你好运。

关于java - 尝试从 JTextArea 回显文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31226171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com