ホームページ >Java >&#&チュートリアル >Java 9 で JavaFX と WebSocket を使用してリアルタイム通信用のグラフィカル インターフェイスを実装する方法

Java 9 で JavaFX と WebSocket を使用してリアルタイム通信用のグラフィカル インターフェイスを実装する方法

WBOY
WBOYオリジナル
2023-07-30 16:57:231005ブラウズ

JavaFX と WebSocket を使用して Java 9 でリアルタイム通信用のグラフィカル インターフェイスを実装する方法

はじめに:
インターネットの発展に伴い、リアルタイム通信の必要性が高まっています。そしてより一般的です。 Java 9 では、JavaFX および WebSocket テクノロジを使用して、グラフィカル インターフェイスを備えたリアルタイム通信アプリケーションを実装できます。この記事では、JavaFX と WebSocket テクノロジを使用して Java 9 でリアルタイム通信用のグラフィカル インターフェイスを実装する方法を紹介し、対応するコード例を添付します。

パート 1: JavaFX の基礎
WebSocket を使用してリアルタイム通信を実現する方法を紹介する前に、まず JavaFX の基本知識を理解しましょう。 JavaFX は、グラフィカル インターフェイスを開発するために Oracle が開発したフレームワークで、XML ベースの記述言語 FXML を使用してインターフェイス レイアウトを定義します。

コード例 1:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;

public class JavaFXExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button("点击我");
        btn.setOnAction(e -> {
            System.out.println("Hello JavaFX");
        });

        Scene scene = new Scene(btn, 300, 200);

        primaryStage.setTitle("JavaFX示例");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

上記のコードでは、単純な JavaFX アプリケーション ウィンドウを作成し、そのウィンドウにボタンを追加しました。ボタンをクリックすると、コンソールに「Hello JavaFX」と出力されます。

パート 2: WebSocket の基本
WebSocket は、リアルタイム通信を実現するために使用されるプロトコルであり、双方向通信機能を提供します。 Java では、Java API の WebSocket クラスを使用して WebSocket 通信を実装できます。

コード例 2:

import java.net.URI;
import java.net.http.WebSocket;
import java.nio.ByteBuffer;
import java.util.concurrent.CompletableFuture;

public class WebSocketExample {

    public static void main(String[] args) {
        String serverURL = "ws://example.com/websocket";

        CompletableFuture<WebSocket> ws = WebSocket.newWebSocketBuilder()
                .buildAsync(URI.create(serverURL), new WebSocket.Listener() {
                    @Override
                    public void onOpen(WebSocket webSocket) {
                        System.out.println("连接已建立");
                    }

                    @Override
                    public CompletionStage<?> onText(WebSocket webSocket, CharSequence data, boolean last) {
                        System.out.println("接收到消息:" + data.toString());
                        return WebSocket.Listener.super.onText(webSocket, data, last);
                    }

                    @Override
                    public CompletionStage<?> onBinary(WebSocket webSocket, ByteBuffer data, boolean last) {
                        System.out.println("接收到二进制数据");
                        return WebSocket.Listener.super.onBinary(webSocket, data, last);
                    }

                    @Override
                    public CompletionStage<?> onClose(WebSocket webSocket, int statusCode, String reason) {
                        System.out.println("连接已关闭,状态码:" + statusCode);
                        return WebSocket.Listener.super.onClose(webSocket, statusCode, reason);
                    }

                    @Override
                    public void onError(WebSocket webSocket, Throwable error) {
                        System.out.println("发生错误:" + error.getMessage());
                    }
                });

        // 向服务器发送消息
        ws.thenAccept(webSocket -> {
            webSocket.sendText("Hello Server", true);
        });

        // 断开连接
        ws.thenAccept(WebSocket::abort);
    }
}

上記のコードでは、WebSocket を作成し、指定されたサーバーに接続します。 WebSocket のコールバック メソッドを通じて、メッセージの送受信や接続ステータスの処理など、サーバーとの対話を処理できます。

パート 3: JavaFX と WebSocket を使用してリアルタイム通信用のグラフィカル インターフェイスを実装する
JavaFX と WebSocket の基本を理解したので、これら 2 つのテクノロジを組み合わせて実際のグラフィカル インターフェイスを実装します。 -時間通信アプリケーション。

コード例 3:

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

import java.net.URI;
import java.net.http.WebSocket;
import java.nio.ByteBuffer;
import java.util.concurrent.CompletableFuture;

public class RealTimeCommunicationApp extends Application {
    private WebSocket webSocket;
    private TextArea messageArea;

    @Override
    public void start(Stage primaryStage) {
        VBox root = new VBox();
        messageArea = new TextArea();
        TextField inputField = new TextField();

        inputField.setOnAction(e -> {
            String message = inputField.getText();
            webSocket.sendText(message, true);
            inputField.clear();
        });

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

        Scene scene = new Scene(root, 400, 300);
        primaryStage.setTitle("实时通信应用");
        primaryStage.setScene(scene);
        primaryStage.show();

        connectToServer();
    }

    private void connectToServer() {
        String serverURL = "ws://example.com/websocket";

        CompletableFuture<WebSocket> ws = WebSocket.newWebSocketBuilder()
                .buildAsync(URI.create(serverURL), new WebSocket.Listener() {
                    @Override
                    public void onOpen(WebSocket webSocket) {
                        Platform.runLater(() -> {
                            messageArea.appendText("连接已建立
");
                        });
                    }

                    @Override
                    public CompletionStage<?> onText(WebSocket webSocket, CharSequence data, boolean last) {
                        Platform.runLater(() -> {
                            messageArea.appendText("接收到消息:" + data.toString() + "
");
                        });
                        return WebSocket.Listener.super.onText(webSocket, data, last);
                    }

                    @Override
                    public CompletionStage<?> onBinary(WebSocket webSocket, ByteBuffer data, boolean last) {
                        Platform.runLater(() -> {
                            messageArea.appendText("接收到二进制数据
");
                        });
                        return WebSocket.Listener.super.onBinary(webSocket, data, last);
                    }

                    @Override
                    public CompletionStage<?> onClose(WebSocket webSocket, int statusCode, String reason) {
                        Platform.runLater(() -> {
                            messageArea.appendText("连接已关闭,状态码:" + statusCode + "
");
                        });
                        return WebSocket.Listener.super.onClose(webSocket, statusCode, reason);
                    }

                    @Override
                    public void onError(WebSocket webSocket, Throwable error) {
                        Platform.runLater(() -> {
                            messageArea.appendText("发生错误:" + error.getMessage() + "
");
                        });
                    }
                });

        ws.thenAccept(webSocket -> {
            this.webSocket = webSocket;
        });
    }

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

上記のコードでは、テキスト領域とテキスト入力ボックスを含む JavaFX アプリケーション ウィンドウを作成します。ユーザーが入力ボックスにテキストを入力して Enter キーを押すと、プログラムはテキストをサーバーに送信します。サーバーからメッセージを受信すると、プログラムはメッセージをテキスト領域に追加して表示します。

結論:
この記事では、Java 9 で JavaFX と WebSocket テクノロジを使用して、リアルタイム通信用のグラフィカル インターフェイスを実装する方法を紹介します。 JavaFX と WebSocket の基本知識を習得し、実際のコード例と組み合わせることで、Java 9 でリアルタイム通信機能を備えたグラフィカル インターフェイス アプリケーションを簡単に実装できます。この記事がお役に立てば幸いです!

以上がJava 9 で JavaFX と WebSocket を使用してリアルタイム通信用のグラフィカル インターフェイスを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。