首頁  >  文章  >  Java  >  如何在Java 9中使用JavaFX和WebSockets來實現即時通訊的圖形介面

如何在Java 9中使用JavaFX和WebSockets來實現即時通訊的圖形介面

王林
王林原創
2023-07-30 10:54:191716瀏覽

如何在Java 9中使用JavaFX和WebSockets來實現即時通訊的圖形介面

引言:
在當今網路時代,即時通訊是非常重要的功能之一。例如,即時更新股市行情、即時聊天等。本文將介紹如何使用Java 9中的JavaFX和WebSockets來實現即時通訊的圖形介面。

第一部分:JavaFX簡介
JavaFX是一種用於建立富客戶端應用程式的Java庫。它提供了強大的圖形介面,可以輕鬆創建各種視覺效果。

第二部分:WebSockets簡介
WebSockets是一種用於在客戶端和伺服器之間進行即時雙向通訊的技術。它允許伺服器主動發送訊息給客戶端,並提供了一種簡單的協定來處理即時通訊。

第三部分:JavaFX和WebSockets的結合
現在讓我們來看看如何將JavaFX和WebSockets結合起來,實現即時通訊的圖形介面。首先,我們需要建立一個JavaFX應用程序,並將WebSockets庫新增到專案的依賴中。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javax.websocket.ClientEndpoint;
import javax.websocket.ContainerProvider;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;

@ClientEndpoint
public class RealTimeApplication extends Application {

    private Session session;
    private TextArea messageArea;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Real Time Application");

        VBox vbox = new VBox();

        messageArea = new TextArea();
        messageArea.setEditable(false);

        TextField inputField = new TextField();
        inputField.setOnAction(event -> {
            String message = inputField.getText();
            session.getAsyncRemote().sendText(message);
            inputField.setText("");
        });

        vbox.getChildren().addAll(messageArea, inputField);

        primaryStage.setScene(new Scene(vbox, 400, 300));
        primaryStage.show();

        connect();
    }

    @Override
    public void stop() {
        try {
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @OnMessage
    public void onMessage(String message) {
        messageArea.appendText(message + "
");
    }

    private void connect() {
        try {
            WebSocketContainer container = ContainerProvider.getWebSocketContainer();
            session = container.connectToServer(this, new URI("ws://localhost:8080/ws"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述程式碼中,我們建立了一個名為 "RealTimeApplication" 的JavaFX應用程序,並新增了一個用於顯示訊息的TextArea和一個用於輸入訊息的TextField。當使用者在TextField中按下Enter鍵時,我們使用WebSockets的會話傳送訊息到伺服器。當收到來自伺服器的訊息時,我們將在TextArea中顯示它。

第四部分:伺服器端設定
接下來,我們需要設定伺服器端來處理來自客戶端的訊息並將其廣播給所有連接的客戶端。在這裡,我們使用Spring Boot來創建一個簡單的WebSockets伺服器。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketTransportRegistration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Configuration
    @EnableWebSocketMessageBroker
    public static class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

        @Override
        public void configureWebSocketTransport(WebSocketTransportRegistration registration) {
            registration.setMessageSizeLimit(1024000);
        }

        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
            registry.addEndpoint("/ws").withSockJS();
        }
    }

    @ServerEndpoint(value = "/ws")
    public static class WebSocketServer {

        @OnMessage
        public void onMessage(Session session, String message) throws IOException, EncodeException {
            for (Session client : session.getOpenSessions()) {
                client.getBasicRemote().sendText(message);
            }
        }
    }
}

在上述程式碼中,我們建立了一個名為 "WebSocketServer" 的WebSocket伺服器並使用 @ServerEndpoint 註解將其綁定到 "/ws" 端點。當收到來自客戶端的訊息時,伺服器將對所有連線的客戶端進行廣播。

結論:
透過結合JavaFX和WebSockets,我們可以輕鬆地實現一個即時通訊的圖形介面。無論您是為了即時更新股市行情還是即時聊天,這種技術都是非常有用的。希望本文對您在Java 9中利用JavaFX和WebSockets實現即時通訊的圖形介面有所幫助。

參考連結:

  • JavaFX官方文件:https://openjfx.io/javadoc/12/
  • WebSocket官方文件:https://www. w3.org/TR/websockets/
  • Spring Boot官方文件:https://spring.io/projects/spring-boot

以上是如何在Java 9中使用JavaFX和WebSockets來實現即時通訊的圖形介面的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn