JDK-8297500 : JavaFX application freezes completely after some time when using the WebView
  • Type: Bug
  • Component: javafx
  • Sub-Component: web
  • Affected Version: openjfx19,openjfx20
  • Priority: P3
  • Status: New
  • Resolution: Unresolved
  • OS: linux_ubuntu
  • CPU: x86_64
  • Submitted: 2022-11-18
  • Updated: 2022-11-23
Related Reports
Relates :  
Relates :  
Description
ADDITIONAL SYSTEM INFORMATION :
Linux Ubuntu 20.04 LTS 

openjdk version "18.0.2" 2022-07-19
IBM Semeru Runtime Open Edition 18.0.2.1 (build 18.0.2+9)
Eclipse OpenJ9 VM 18.0.2.1 (build openj9-0.33.1, JRE 18 Linux amd64-64-Bit Compressed References 20220817_34 (JIT enabled, AOT enabled)
OpenJ9   - 1d9d16830
OMR      - b58aa2708
JCL      - 8406c39ea29 based on jdk-18.0.2+9)


A DESCRIPTION OF THE PROBLEM :
Page controls not working properly

Simple Program  using WebView





STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1.WebView with url  >>  www.stake.com
2.click in Expand SideBar and after click again and no work more.
3.click in Sign In and screen frozen  and display error
4. In Chrome, FireFox, Edge, Opera all work correctly

** (java:578189): CRITICAL **: 18:41:37.972: gst_segment_to_stream_time: assertion 'segment->format == format' failed
nov. 18, 2022 6:41:38 PM com.sun.javafx.webkit.prism.WCMediaPlayerImpl$CreateThread run
ADVERTÊNCIA: CreateThread ERROR: java.lang.UnsupportedOperationException: Unsupported protocol "data"
nov. 18, 2022 6:41:38 PM com.sun.javafx.webkit.prism.WCMediaPlayerImpl$CreateThread run
ADVERTÊNCIA: CreateThread ERROR: java.lang.UnsupportedOperationException: Unsupported protocol "data"
nov. 18, 2022 6:41:38 PM com.sun.javafx.webkit.prism.WCMediaPlayerImpl onError
ADVERTÊNCIA: onError, errCode=0, msg=Unsupported protocol "data"
nov. 18, 2022 6:41:38 PM com.sun.javafx.webkit.prism.WCMediaPlayerImpl onError
ADVERTÊNCIA: onError, errCode=0, msg=Unsupported protocol "data"




ACTUAL -
freezing WebView

---------- BEGIN SOURCE ----------
// Main Program
// ******************************************
package com.menezes.robo;

import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class RoboStake extends Application {
    
    Robo_screenController controller=null;
    Parent parent=null;

    @Override
    public void start(Stage stage) { 
        
        
        FXMLLoader fxml = new FXMLLoader( getClass().getResource("robo_screen.fxml") );
        try {
            parent = (Parent)fxml.load();
            controller = fxml.getController();            
                
            controller.setApplication(this);
        } catch (IOException ex) {
            ex.printStackTrace();
        }               
        
        
        
        final Scene scene = new Scene(parent, 1000, 550);
        stage.setScene(scene);
        stage.show();

        //stage.setFullScreenExitHint("");
        //stage.setFullScreen(true);
    }

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


// Controller
/******************************************************
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/javafx/FXMLController.java to edit this template
 */
package com.menezes.robo;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.web.PopupFeatures;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.util.Callback;

/**
 * FXML Controller class
 *
 * @author jorge
 */
public class Robo_screenController implements Initializable {

    @FXML
    private ToggleButton start;
    @FXML
    private ToggleGroup group1;
    @FXML
    private ToggleButton stop;
    @FXML
    private ComboBox<?> robois;
    @FXML
    private Label status;
    @FXML
    private WebView web;

    /**
     * Initializes the controller class.
     */ 
    
    RoboStake robo = null;
    WebEngine eng  = null;
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    
    
    public void setApplication(RoboStake robo) {
      this.robo = robo;
      
      eng = web.getEngine();
      
      eng.setCreatePopupHandler(new Callback<PopupFeatures, WebEngine>() {

         @Override
         public WebEngine call(PopupFeatures p) {
            Stage stage = new Stage(StageStyle.UTILITY);
            WebView wv2 = new WebView();
            stage.setScene(new Scene(wv2));
            stage.show();
            return wv2.getEngine();
         }
      });
      
      
      // eng.load("https://stake.com/casino/games/dice");
      eng.load("https://stake.com");
      
      
      
    }
    
    
}


// FXML
// ************************************************************************
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ToggleButton?>
<?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.web.WebView?>


<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.menezes.robo.Robo_screenController">
   <center>
      <WebView fx:id="web" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
   </center>
   <bottom>
      <BorderPane BorderPane.alignment="CENTER">
         <center>
            <GridPane BorderPane.alignment="CENTER">
              <columnConstraints>
                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
                  <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="250.0" />
                  <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" />
              </columnConstraints>
              <rowConstraints>
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
              </rowConstraints>
               <children>
                  <StackPane prefHeight="30.0">
                     <children>
                        <StackPane prefHeight="150.0">
                           <children>
                              <ToggleButton fx:id="start" mnemonicParsing="false" text="Iniciar">
                                 <toggleGroup>
                                    <ToggleGroup fx:id="group1" />
                                 </toggleGroup>
                              </ToggleButton>
                           </children>
                        </StackPane>
                     </children>
                  </StackPane>
                  <StackPane prefHeight="150.0" GridPane.columnIndex="1">
                     <children>
                        <ToggleButton fx:id="stop" mnemonicParsing="false" selected="true" text="Parar" toggleGroup="$group1" />
                     </children>
                  </StackPane>
                  <StackPane alignment="CENTER_LEFT" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="2">
                     <children>
                        <ComboBox fx:id="robois" prefWidth="150.0" />
                     </children>
                     <GridPane.margin>
                        <Insets left="20.0" />
                     </GridPane.margin>
                  </StackPane>
                  <StackPane alignment="CENTER_LEFT" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="3">
                     <children>
                        <Label fx:id="status" text="Label" />
                     </children>
                  </StackPane>
               </children>
               <opaqueInsets>
                  <Insets />
               </opaqueInsets>
               <BorderPane.margin>
                  <Insets bottom="10.0" />
               </BorderPane.margin>
               <padding>
                  <Insets left="10.0" />
               </padding>
            </GridPane>
         </center>
      </BorderPane>
   </bottom>
</BorderPane>

---------- END SOURCE ----------

FREQUENCY : always



Comments
Relates to JDK-8263788
23-11-2022

Checked with attached testcase in Ubuntu 20.02, observed freeze and console Warnings<attached screenshot> in openjfx19, openjfx20ea7 Didn't observe freeze in openjfx17, openjfx11. Moving to JDK Project for more evaluation.
23-11-2022