Я пытаюсь подключиться к 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
Почему WebView не удалось подключиться к WebSocket в JavaFX? ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1732973284
Anonymous
Я пытаюсь подключиться к WebSocket из WebView в JavaFX (поскольку я хочу использовать сторонний компонент, доступный только в Javascript). В HTML-файле WebView я использовал Javascript для создания экземпляра WebSocket, а в части JavaFX я использовал Java-WebSocket для создания WebSocketServer. Но теперь, после запуска WebSocketServer и инициализации клиента Javascript WebSocket, WebSocketServer, похоже, не открывал соединение с WebView. Более того, если я открою HTML-файл в браузере (используя функцию IntelliJ IDEA «открыть в браузере») во время запуска приложения, WebSocket, похоже, откроет соединение.
Я искал некоторые ответы на Stack Overflow, но все они кажутся устаревшими.
Вот код.
[b]HelloApplication.java[/b]
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();
}
}
[b]web-view.html[/b]
var webSocket = new WebSocket("ws://localhost:8080");
document.getElementById("text").innerHTML = "WebSocket instance created: " + webSocket.url; // show the URL of the WebSocket instance
[b]pom.xml[/b]
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
[b]module-info.java[/b]
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79239641/why-did-a-webview-fail-to-connect-to-a-websocket-in-javafx[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия