>  기사  >  Java  >  Java 9에서 JavaFX 및 WebSocket을 사용하여 실시간 통신을 위한 그래픽 인터페이스를 구현하는 방법

Java 9에서 JavaFX 및 WebSocket을 사용하여 실시간 통신을 위한 그래픽 인터페이스를 구현하는 방법

WBOY
WBOY원래의
2023-07-30 16:57:23950검색

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의 기본 사항을 이해했으므로 이 두 기술을 결합하여 그래픽 인터페이스가 있는 실시간 통신 애플리케이션을 구현하겠습니다. .

코드 예제 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.