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。 –