簡體   English   中英

嘗試從JTextArea回顯文本

[英]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());
    }
}

任何建議將不勝感激。

謝謝

問題是由於兩個小缺陷:

  1. 您應該實現keyReleased()而不是keyPressed() ,因為在調用keyPressed()之后,將更新textAreaTop的文本。 因此,當調用keyReleased()方法時,您的textAreaTop具有您輸入的最新文本。

  2. 您不應該在每次按鍵時都創建該Socket對象。 您應該在keyReleased (以前的keyPressed)匿名類和方法之外定義Socket和對輸入/輸出Streams的引用。 因此,每當您按下一個鍵時,唯一要做的就是將文本從textAreaTopout.println(text)到服務器。 在這種情況下,我已經測試了代碼,並且可以正常工作。

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM