Почему WebView не удалось подключиться к WebSocket в JavaFX?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему WebView не удалось подключиться к WebSocket в JavaFX?

Сообщение Anonymous »

Я пытаюсь подключиться к WebSocket из WebView в JavaFX (поскольку я хочу использовать сторонний компонент, доступный только в Javascript). В HTML-файле WebView я использовал Javascript для создания экземпляра WebSocket, а в части JavaFX я использовал Java-WebSocket для создания WebSocketServer. Но теперь, после запуска WebSocketServer и инициализации клиента Javascript WebSocket, WebSocketServer, похоже, не открывал соединение с WebView. Более того, если я открою HTML-файл в браузере (используя функцию IntelliJ IDEA «открыть в браузере») во время запуска приложения, WebSocket, похоже, откроет соединение.
Я искал некоторые ответы на Stack Overflow, но все они кажутся устаревшими.

Вот код.
HelloApplication.java
package com.remmymilkyway.websocketdemo;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.Objects;

public class HelloApplication extends Application {
private WebSocketServer server;

@Override
public void start(Stage stage) {
WebView webView = new WebView();
webView.getEngine().load(Objects.requireNonNull(this.getClass().getResource("web-view.html")).toExternalForm());

server = new WebSocketServer(new InetSocketAddress("localhost", 8080)) {
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
System.out.println("New connection: " + conn.getRemoteSocketAddress().getAddress().getHostAddress());
}

@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
System.out.println("Connection closed: " + conn.getRemoteSocketAddress().getAddress().getHostAddress());
}

@Override
public void onMessage(WebSocket conn, String message) {
System.out.println("Received message: " + message);
}

@Override
public void onError(WebSocket conn, Exception ex) {
System.out.println("An error occurred: " + ex);
}

@Override
public void onStart() {
System.out.println("Server started");
}
};
server.start();
server.broadcast("Server started.");

Scene scene = new Scene(webView);
stage.setTitle("Hello!");
stage.setScene(scene);
stage.show();
}

@Override
public void stop() throws Exception {
super.stop();
server.stop();
System.out.println("Server stopped");
}

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

web-view.html








var webSocket = new WebSocket("ws://localhost:8080");
document.getElementById("text").innerHTML = "WebSocket instance created: " + webSocket.url; // show the URL of the WebSocket instance




pom.xml


4.0.0

com.remmymilkyway
WebSocketDemo
1.0-SNAPSHOT
WebSocketDemo


UTF-8
5.10.2




org.openjfx
javafx-controls
22.0.1


org.openjfx
javafx-fxml
22.0.1



org.junit.jupiter
junit-jupiter-api
${junit.version}
test


org.junit.jupiter
junit-jupiter-engine
${junit.version}
test


org.openjfx
javafx-web
22.0.1


org.java-websocket
Java-WebSocket
1.5.7






org.apache.maven.plugins
maven-compiler-plugin
3.13.0

22
22



org.openjfx
javafx-maven-plugin
0.0.8



default-cli


com.remmymilkyway.websocketdemo/com.remmymilkyway.websocketdemo.HelloApplication

app
app
app
true
true
true








module-info.java
module com.remmymilkyway.websocketdemo {
requires javafx.controls;
requires javafx.fxml;
requires javafx.web;
requires org.java_websocket;

opens com.remmymilkyway.websocketdemo to javafx.fxml;
exports com.remmymilkyway.websocketdemo;
}


Вот выходные данные и исключения, которые я получаю при запуске приложения.
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.
Server started
xxxx-xx-xx xx:xx:xx.xxx java[76456:7816534] +[IMKClient subclass]: chose IMKClient_Modern
xxxx-xx-xx xx:xx:xx.xxx java[76456:7816534] +[IMKInputSession subclass]: chose IMKInputSession_Modern
Server stopped

Если я открою web-view.html на вкладке браузера, я получу дополнительный вывод.
New connection: 127.0.0.1
Connection closed: 127.0.0.1


Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-javafx
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»