Я новичок 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, но это не помогло решить мою проблему. Может кто-нибудь, пожалуйста, помогите мне? Заранее спасибо!