![](/img/trans.png)
[英]Trying to read from a text file to display into a JTextArea using a BufferedReader
[英]Trying to echo text from JTextArea
我真的看不出這個錯誤在哪里。
我已經為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()
,因為在調用keyPressed()
之后,將更新textAreaTop
的文本。 因此,當調用keyReleased()
方法時,您的textAreaTop
具有您輸入的最新文本。
您不應該在每次按鍵時都創建該Socket
對象。 您應該在keyReleased
(以前的keyPressed)匿名類和方法之外定義Socket
和對輸入/輸出Streams
的引用。 因此,每當您按下一個鍵時,唯一要做的就是將文本從textAreaTop
和out.println(text)
到服務器。 在這種情況下,我已經測試了代碼,並且可以正常工作。
祝好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.