Foz*_*zey 3 java sockets javafx
我正在尝试使用 JavaFX 编写服务器/客户端套接字程序和客户端 GUI。我面临的问题是 GUI 和套接字连接不能独立运行,这意味着当我运行客户端程序时,会显示 GUI 并且不会发生套接字连接。然后,在关闭 GUI 窗口后,套接字连接将按照最初的方式进行初始化。对java和javafx/socket编程也没有太多经验,只是想学习。
import java.io.*;
import java.lang.*;
import java.net.Socket;
public class ClientSocket {
public Socket socket;
public BufferedReader bufferedReader;
public BufferedWriter bufferedWriter;
public ClientSocket(Socket socket) {
try {
this.socket = socket;
this.bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
this.bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
} catch (IOException e) {
closeConnection(socket, bufferedReader, bufferedWriter);
}
}
public static void startConnection() {
try {
Socket socket = new Socket(Configuration.serverAddress, Configuration.serverPort);
System.out.println("Client: Connected to server on " + Configuration.serverAddress +
" " + Configuration.serverPort + ".");
} catch (IOException e) {
System.out.println("Client: Error connecting to server on " + Configuration.serverAddress +
" " + Configuration.serverPort + ".");
}
}
public static void closeConnection(Socket socket, BufferedReader bufferedReader, BufferedWriter bufferedWriter) {
try {
if (socket != null) {
socket.close();
System.out.println("Client: Socket connection has been closed to " + Configuration.serverAddress +
" " + Configuration.serverPort + ".");
}
if (bufferedReader != null) {
bufferedReader.close();
}
if (bufferedWriter != null) {
bufferedWriter.close();
}
}catch(IOException e){
}
}
}
Run Code Online (Sandbox Code Playgroud)
import javafx.application.Application;
import javafx.stage.Stage;
public class ClientWindow extends Application{
public void start(Stage gameWindow) {
gameWindow.show();
}
}
Run Code Online (Sandbox Code Playgroud)
import javafx.application.Application;
public class Client {
public static void main(String[] args) {
Application.launch(ClientWindow.class, args);
ClientSocket.startConnection();
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过一些小步骤,比如让套接字连接本身正常工作,然后尝试在其旁边实现 javafx GUI。我仍然无法让它同时运行 GUI 和套接字连接。我假设 JavaFX GUI 处于某种循环状态,一旦启动就会停止自身关闭,然后保持套接字程序从启动直到 GUI 完成运行。所以只有当GUI关闭时,socket程序才会启动。
阅读 JavaFX应用程序javadoc 以了解 JavaFX 应用程序的生命周期。
\n特别参见launch()方法文档:
\n\n在应用程序退出(通过调用 Platform.exit() 或所有应用程序窗口都已关闭)之前,launch 方法不会返回。
\n
在此代码中,套接字连接将\xe2\x80\x99t启动,直到JavaFX平台退出:
\npublic static void main(String[] args) {\n Application.launch(ClientWindow.class, args);\n ClientSocket.startConnection();\n}\nRun Code Online (Sandbox Code Playgroud)\n要在初始化或启动时执行某些操作,请在重写或方法Application中实现代码。相似地,init()start()stop()用于释放资源,例如关闭应用程序可能已打开的其他线程或持久连接。
该示例使用 JavaFX 应用程序中的套接字。它演示了同步和异步操作模式。
\n异步操作模式对编程来说更具挑战性。仅当您的应用程序在套接字流上有长时间运行的阻塞调用时,才可能需要异步调用。
\n如果你使用异步调用模式,那么我建议学习:
\nStackOverflow 上的 JavaFX 并发问题和解答也可能对您有所帮助。
\n| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |