Метод JTextArea append () не добавляется - PullRequest
1 голос
/ 03 марта 2020

Я новичок ie до JFrames и JTextArea. У меня есть простая программа TCP Socket. Сервер читает файл журнала и отправляет его клиенту построчно. Полученные строки должны отображаться на клиенте GUI. Когда я запускаю программу, полученные данные не добавляются в JTextArea. Вот моя программа,

Реализация клиента:

public class Client1Impl extends Client1 {

    private static final String EXIT = "EXIT";
    private static final String FAILED = "FAILED";
    private static final String AUTHENTICATE = "20^B";

    JFrame frame = new JFrame("Log File");
    JTextField textField = new JTextField(40);
    JTextArea textArea = new JTextArea(10, 70);

    public Client1Impl(String _sAdress, int _iPort) {

        textField.setEditable(true);
        textArea.setEditable(false);
        frame.getContentPane().add(textField, BorderLayout.NORTH);
        frame.getContentPane().add(new JScrollPane(textArea), BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);

        textField.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                readMessage(textField.getText().trim());
            }
        });

        try {
            setSocket(new Socket(_sAdress, _iPort));
            System.out.println("Connected to Server");

            setPrintWriter(new PrintWriter(getSocket().getOutputStream()));
            setBufferedReader(new BufferedReader(new InputStreamReader(getSocket().getInputStream()))); 
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public boolean authenticateUser(String _sAuthID) {
        // TODO Auto-generated method stub

        //authentication logic

    }


    /*
     * Keep reading until "EXIT" is input
     */
    @Override
    public void readMessage(String _sTimer) {

        Scanner sc = new Scanner(System.in);
        String sReply = "";

        try {
            //checking server response
            if(authenticateUser(AUTHENTICATE)) {

                System.out.println("Authentication Failed! Closing the connection");
            }
            else {

                while(true) {

                    if(_sTimer.equalsIgnoreCase(EXIT)) {

                        System.out.println("Connection closed");
                        getPrintWriter().println(EXIT);
                        getPrintWriter().flush();
                        sc.close();
                        return;
                    }

                    getPrintWriter().println(Integer.parseInt(_sTimer));
                    getPrintWriter().flush();

                    while(!(sReply = getBufferedReader().readLine()).equalsIgnoreCase(EXIT)) {
                        //System.out.println(sReply);  <- Here I tried printing the received lines on console. It prints each and every line successfully. 
                        textArea.append(sReply + "\n");
                    }       

                }               
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        sc.close();
        closeConnection();
    }

    /*
     * Close all connections
     * close in
     * close out
     * close socket
     */
    @Override
    public void closeConnection() {

        try {

            getBufferedReader().close();
            getPrintWriter().close();
            getSocket().close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

Основная программа клиента:

public class Client1Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Client1Impl client1Impl = new Client1Impl("127.0.0.1", 9090);
        client1Impl.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

Я попытался напечатать строки в консоли без добавления, и она печатает все линии (поэтому я предполагаю, что клиент не получает нулевые или пустые значения). Я ссылался на несколько похожих вопросов о StackOverflow, но это не помогло решить мою проблему. Может кто-нибудь, пожалуйста, помогите мне? Заранее спасибо!

...