我正在尝试在JavaFX的WebView中运行一些包含Javascript的SVG.我知道我正在尝试运行的一些脚本有错误,我正在试图找出如何将它们打印到控制台,以便我可以调试它们.我尝试了以下内容,但从未调用过WebErrorEvent:
WebEngine webEngine = browser.getEngine();
webEngine.setOnError(new EventHandler<WebErrorEvent>()
{
@Override
public void handle(WebErrorEvent event)
{
System.err.println(event);
}
});
Run Code Online (Sandbox Code Playgroud)
这是从此控件获取javascript错误反馈的正确方法吗?
我的问题是,当我从Windows任务栏WebView恢复最小化的javafx应用程序时被禁用。
调整大小阶段后,它将变为启用状态。
主要的Java代码:
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
AnchorPane root = new AnchorPane();
FXMLLoader loader = new FXMLLoader(getClass().getResource("Browser.fxml"));
root = loader.load();
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.setTitle("Shivam Jewels ERP");
primaryStage.setMaximized(true);
primaryStage.show();
primaryStage.iconifiedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
if (t1) {
System.out.println("minimized:");
}
}
});
primaryStage.maximizedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if (newValue) …Run Code Online (Sandbox Code Playgroud) 当我使用 WebEngine 创建新舞台来播放 YouTube 视频时,在我关闭它之后 - Youtube 继续在后台播放。如果我使用“Platform.exit” - 它会关闭我所有的JavaFX应用程序,但我只想关闭为YouTube创建的阶段。
这是我为 YouTube 播放器设计的课程:
public class YouTube_player {
public YouTube_player(String url) {
final Group root = new Group();
Scene scene = new Scene(root, 820, 480);
final Stage stage = new Stage();
final WebView webView = new WebView();
final WebEngine webEngine = webView.getEngine();
webEngine.loadContent(url);
root.getChildren().add(webView);
stage.centerOnScreen();
stage.setScene(scene);
stage.show();
stage.setOnCloseRequest(new EventHandler<WindowEvent>(){
@Override
public void handle(WindowEvent event) {
//What i should put here to close only this stage.
//Platform.exit - closes all my stages. …Run Code Online (Sandbox Code Playgroud) 这就是我加载页面的方式,我想在浏览器中修改它
WebView browser = new WebView();
WebEngine engine = browser.getEngine();
String cwd = System.getProperty("user.dir");
String name = "\\src\\web\\index.html";
engine.loadContent(getPATHtoHTML(cwd + name));
Run Code Online (Sandbox Code Playgroud) 我正在将 Android 应用程序移植到 javaFX 以进行 Windows 部署,我对 javaFX 和桌面部署很陌生,但对 java 来说并不陌生。
该应用程序包含一个 WebView,它加载通过 Json 从服务器获取的 url(因此本质上可以是任何内容)。
openJDK 14、openJfx 16、intellij idea Ultimate 2021.1.3、gradle:插件:org.beryx.jlink 和 org.openjfx.javafxplugin
当我在开发和测试中(在 Windows 10 计算机上)运行该程序时,效果很好,但是当它在 Windows 计算机(到目前为止的任何 Windows 10)上打包和部署时,我得到一个“java.lang.Throwable:SSL 握手”加载页面时出现“失败”异常。
这是堆栈跟踪:
[ERROR] 2021-07-14 14:13:53.737 [JavaFX Application Thread] MediaElementWeb - WebView Failed:
java.lang.Throwable: SSL handshake failed
at javafx.scene.web.WebEngine$LoadWorker.describeError(WebEngine.java:1440) ~[javafx.web:?]
at javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(WebEngine.java:1379) ~[javafx.web:?]
at javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(WebEngine.java:1240) ~[javafx.web:?]
at com.sun.webkit.WebPage.fireLoadEvent(WebPage.java:2524) ~[javafx.web:?]
at com.sun.webkit.WebPage.fwkFireLoadEvent(WebPage.java:2369) ~[javafx.web:?]
at com.sun.webkit.network.URLLoaderBase.twkDidFail(Native Method) ~[javafx.web:?]
at com.sun.webkit.network.URLLoader.notifyDidFail(URLLoader.java:799) ~[javafx.web:?]
at com.sun.webkit.network.URLLoader.lambda$didFail$6(URLLoader.java:782) ~[javafx.web:?]
at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:447) ~[javafx.graphics:?]
at java.security.AccessController.doPrivileged(AccessController.java:391) ~[?:?]
at …Run Code Online (Sandbox Code Playgroud) 以下是我的代码。一切安好。我可以加载远程页面。我可以放置 HTML 内容,但我的img标签显示X符号,表示它无法加载图像。
注意:我的图像与JavaFXSmiley 文件夹中的类位于同一个包中,我可以列出所有图像,这意味着路径没有问题。
import java.awt.BorderLayout;
import java.io.File;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class JavaFX {
static WebView webView;
static WebEngine webEngine;
static String imgs = "";
public JavaFX() {
File f = new File(getClass().getResource("/Smiley").getFile());
for (File fs : f.listFiles()) {
imgs += "<img src=\""+fs+"\" width='50' />";
}
System.out.println(imgs);
}
private void initAndShowGUI() {
// This method is invoked on …Run Code Online (Sandbox Code Playgroud) 有没有办法使用?识别被点击的元素的类型webView(如文本框/广播/按钮等)webEngine.getDocument()?
假设我点击文本字段,我可以得到点击位置的x,y坐标.是否有可能识别该特定位置的元素?像document.elementFromPoint()Javascript中的方法.
我可以使用Jquery/Javascript来做到这一点.但由于我们可以访问Document对象及其元素,有没有办法识别使用JavaFX本身?
我有一个JavaFX WebView,我希望它与开始时的场景一样大.如果我可以通过场景调整大小,这将是完美的.
但是现在我只关注初始尺寸.
@Override
public void start(Stage stage) {
try {
Scene scene = new Scene(createWebViewPane(), 1920, 1080);
scene.getStylesheets().add(getClass().getResource("Styles/application.css").toExternalForm());
stage.setScene(scene);
stage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码创建了一个宽度为1920px,高度为1080px的场景.createWebViewPane()在窗格上创建WebView.
private Pane createWebViewPane() {
final Pane pane = new Pane();
pane.minWidth(1920);
pane.minHeight(1080);
WebView browser = new WebView();
browser.minWidth(1920);
browser.prefWidth(1920);
browser.minHeight(1080);
browser.prefHeight(1080);
WebEngine webEngine = browser.getEngine();
webEngine.load(getClass().getResource("index.html").toExternalForm());
pane.getChildren().add(browser);
return pane;
}
Run Code Online (Sandbox Code Playgroud)
在那里,我尝试设置宽度/高度.我也在样式表中设置它.
web-view{
-fx-font-scale: 1;
-fx-min-width: 1920px;
-fx-min-height: 1080px;
-fx-pref-width: 100%;
-fx-pref-height: 100%;
}
Run Code Online (Sandbox Code Playgroud)
但是这些属性似乎都不会影响WebView.它仍然具有默认大小.宽800像素,高600像素.
我正在切换JEditorPane到WebEngine(JavaFX).
我曾经按如下方式锁定文本突出显示(选择)JEditorPane.
my_editor.setEditable(false);
my_editor.getInputMap().put(KeyStroke.getKeyStroke("control C"), "none");
Run Code Online (Sandbox Code Playgroud)
现在我喜欢这样做WebEngine,我怎么能这样做?禁用复制,突出显示和编辑模式.谢谢.