0
我正在學習用Java編寫代碼。我想和gui寫簡單的聊天。到目前爲止我的應用程序通過命令行工作我有興趣爲客戶端部分構建gui。我很難連接到它。我的問題是,我是否必須爲gui編寫特殊類,而不是在客戶端類中構建這樣一個對象並對其進行操作?特別是我在通過gui建立客戶端和服務器之間的通信時遇到問題。我的命令行應用程序代碼與客戶端部分如下所示。我很感謝在這個問題上的任何建議。從控制檯到GUI的應用程序
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 4444);
System.out.println("CLIENT: Server connected on port 4444");
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("CLIENT: IN and OUT streams opened. Starting sending data...");
ClientInputThread thread = new ClientInputThread(socket);
thread.start();
String serverResponse;
while ((serverResponse = in.readLine()) != null) {
System.out.println("Server: " + serverResponse);
if (serverResponse.equals("koniec")) {
break;
}
}
System.out.println("CLIENT: Ending server connection. Closing client streams and socket.");
out.close();
in.close();
socket.close();
System.exit(0);
}
catch (UnknownHostException e) {
System.err.println("CLIENT: Trying to connect to unknown host: " + e);
System.exit(1);
}
catch (Exception e) {
System.err.println("CLIENT: Exception: " + e);
System.exit(1);
}
}
}
和
public class ClientInputThread extends Thread {
private PrintWriter out;
public ClientInputThread(Socket clientSocket) {
try {
out = new PrintWriter(clientSocket.getOutputStream(), true);
}
catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}
public void run() {
try {
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
String userInput="";
while (userInput != null) {
userInput = console.readLine();
out.println(userInput);
out.flush();
if (userInput.equals("koniec")) {
break;
}
}
System.exit(0);
}
catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}
}
連接不應該依賴於它是否是一個CLI或GUI。 –
我同意。但我的主要問題是如何將服務器響應從控制檯引導到gui中的JTextField,以及什麼讓我更加困惑 - 我應該在哪裏放置我的gui代碼 - 在單獨的類或客戶端類中。 – data
關閉主題..使用屬性來保存服務器設置,如端口,網址和其他。還可以使用屬性來保存異常消息。並使用記錄器而不是System.out或System.err。 –