When i open our web-page in the WebView a few frames are painted and then JavaFX freezes with high CPU usage. The Swing-Threads still work properly.
In JavaFX 8.0.20 this works.
The website uses AngularJS and is probably relatively big.
I tested the WebView with other AngularJS pages and they work just fine.
By using different debugging tools i found out, that the JavaFX Application Thread is stuck in the pulse() method forever or at least for a long time.
Now an then (several minutes) it can leave this call and actually updates 1 frame of the WebView.
"JavaFX Application Thread" prio=6 tid=0x0000000018a3f000 nid=0x241c runnable [0x00000000196dd000]
java.lang.Thread.State: RUNNABLE
at com.sun.webpane.webkit.Timer.twkFireTimerEvent(Native Method)
at com.sun.webpane.webkit.Timer.fireTimerEvent(Timer.java:66)
at com.sun.webpane.webkit.Timer.notifyTick(Timer.java:47)
- locked <0x0000000702462fb8> (a com.sun.webpane.webkit.Timer)
at javafx.scene.web.WebEngine$PulseTimer$2.pulse(WebEngine.java:915)
at com.sun.javafx.tk.Toolkit$5.run(Toolkit.java:363)
at com.sun.javafx.tk.Toolkit$5.run(Toolkit.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:361)
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:384)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:463)
at com.sun.javafx.tk.quantum.QuantumToolkit$9.run(QuantumToolkit.java:332)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:17)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:67)
at java.lang.Thread.run(Thread.java:745)
With the profiler i see that this is the most active method:
java.net.SocketInputStream.read(byte[], int, int, int)
Self time: 89242 ms (92,8%)
Invocations: 1322
The memory consumption seems to be stable, but a lot of GCs happen.
With ProcessExplorer i made a windows Stack-Dump of the two active threads:
Thread 1:
jvm.dll!JVM_FindSignal+0x9caa7
jvm.dll!JVM_ResolveClass+0x28551
jvm.dll!JVM_ResolveClass+0x1e994
jvm.dll!JVM_FindSignal+0x9c8e2
jvm.dll!JVM_ResolveClass+0x1eb75
jvm.dll!JNI_CreateJavaVM+0xb65
jvm.dll!JNI_CreateJavaVM+0xc136
jfxwebkit.dll!WTFReportBacktrace+0xec
jfxwebkit.dll!WTFReportBacktrace+0x946
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x48491
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x49055
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4d150
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4d96e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4de34
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x40643
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xbaf3e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xc063b
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xc4dbb
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xb9d87
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xda63c
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x218191
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x21858d
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x70c4
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x8020
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x218018
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x105aae
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x118627
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x1246f2
jfxwebkit.dll!JSPropertyNameArrayGetCount+0xcd512
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x67d2
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x2bc34
jfxwebkit.dll!WTFReportBacktrace+0x30837
jfxwebkit.dll!WTFReportBacktrace+0x35722
jfxwebkit.dll!WTFReportBacktrace+0x15b8c
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x6a7b
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x6c7b
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x18855
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x130ef4
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x130fb7
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x1f7ce9
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x119b61
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x11a959
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xfd43
Thread 2:
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x51ffb
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x522ae
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x80904
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x522ae
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4f0b5
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x8e850
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x8e9ae
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x218276
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x21858d
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x6e4d
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x8020
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x218018
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x105aae
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x118627
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x1246f2
jfxwebkit.dll!JSPropertyNameArrayGetCount+0xcd512
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x67d2
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x2bc34
jfxwebkit.dll!WTFReportBacktrace+0x30837
jfxwebkit.dll!WTFReportBacktrace+0x35722
jfxwebkit.dll!WTFReportBacktrace+0x15b8c
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x6a7b
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x6c7b
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x18855
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x130ef4
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x130fb7
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x1f7ce9
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x119b61
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x11a959
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xfd43
It seems there are several threads (at least 3) that alternate in using the CPU.
2 are most active, while the others do only a little bit.
Then one of the active ones becomes inactive and another one becomes active.
Here is a sample app which connects to our testserver and produces the problem:
The "engine.executeScript" call is an attempt to register FirebugLite in the website to see what is happening, but this code is never executed since the page never reaches the SUCCEEDED state. For other working pages this embedding works fine.
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker.State;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javax.swing.JPanel;
import com.sun.javafx.runtime.VersionInfo;
public class JavaFXTest extends Applet
{
@Override
public void init()
{
setLayout(new BorderLayout());
final HTMLPanel htmlPanel = new HTMLPanel();
add(BorderLayout.CENTER, htmlPanel);
htmlPanel.loadURL("http://testserver.knuddels.de/logincheck.html?nick=JavaFX&pwd=ppp&setCookieInResponse=true");
htmlPanel.loadURL("http://testserver.knuddels.de", true);
}
private static class HTMLPanel extends JPanel
{
private static final long serialVersionUID = -6272445527425893706L;
private final JFXPanel jfxPanel = new JFXPanel();
private WebEngine engine;
private volatile boolean isInitialized;
public HTMLPanel()
{
super(new BorderLayout());
Platform.setImplicitExit(false);
}
private void initComponents()
{
if (!isInitialized)
{
this.isInitialized = true;
createScene();
this.add(jfxPanel, BorderLayout.CENTER);
}
}
private void createScene()
{
Platform.runLater(new Runnable()
{
public void run()
{
WebView view = new WebView();
engine = view.getEngine();
engine.getLoadWorker().exceptionProperty().addListener(new ChangeListener<Throwable>()
{
public void changed(ObservableValue<? extends Throwable> o, Throwable old, final Throwable value)
{
if (engine.getLoadWorker().getState() == State.FAILED)
{
System.out.println("Error on: " + engine.getLocation());
if (old != null)
{
old.printStackTrace();
}
if (value != null)
{
value.printStackTrace();
}
}
checkLoadUrls();
}
});
engine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>()
{
public void changed(ObservableValue<? extends State> o, State old, final State state)
{
if (state == State.SUCCEEDED)
{
System.out.println("Page loaded: " + engine.getLocation());
if (!checkLoadUrls())
{
engine.executeScript("if (!document.getElementById('FirebugLite')){E = document['createElement' + 'NS'] && document.documentElement.namespaceURI;E = E ? document['createElement' + 'NS'](E, 'script') : document['createElement']('script');E['setAttribute']('id', 'FirebugLite');E['setAttribute']('src', 'https://getfirebug.com/' + 'firebug-lite.js' + '#startOpened');E['setAttribute']('FirebugLite', '4');(document['getElementsByTagName']('head')[0] || document['getElementsByTagName']('body')[0]).appendChild(E);E = new Image;E['setAttribute']('src', 'https://getfirebug.com/' + '#startOpened');}");
}
}
}
});
jfxPanel.setScene(new Scene(view));
}
});
}
private static String toURL(String str)
{
try
{
return new URL(str).toExternalForm();
}
catch (MalformedURLException exception)
{
return null;
}
}
public void loadURL(final String url)
{
loadURL(url, false);
}
private List<String> urlsToLoad = new CopyOnWriteArrayList<String>();
public void loadURL(final String url, boolean queue)
{
if (queue)
{
urlsToLoad.add(url);
}
else
{
initComponents();
Platform.runLater(new Runnable()
{
public void run()
{
String tmp = toURL(url);
if (tmp == null)
{
tmp = toURL("http://" + url);
}
engine.load(tmp);
}
});
}
}
private boolean checkLoadUrls()
{
if (!urlsToLoad.isEmpty())
{
String url = urlsToLoad.remove(0);
loadURL(url);
return true;
}
return false;
}
}
public static void main(String[] args)
{
Frame f = new Frame("JavaFXTest: " + VersionInfo.getVersion());
f.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
f.setFont(new Font("Arial", Font.PLAIN, 16));
JavaFXTest app = new JavaFXTest();
f.add("Center", app);
app.init();
f.setSize(1024, 800);
f.setResizable(true);
f.setVisible(true);
}
}
In JavaFX 8.0.20 this works.
The website uses AngularJS and is probably relatively big.
I tested the WebView with other AngularJS pages and they work just fine.
By using different debugging tools i found out, that the JavaFX Application Thread is stuck in the pulse() method forever or at least for a long time.
Now an then (several minutes) it can leave this call and actually updates 1 frame of the WebView.
"JavaFX Application Thread" prio=6 tid=0x0000000018a3f000 nid=0x241c runnable [0x00000000196dd000]
java.lang.Thread.State: RUNNABLE
at com.sun.webpane.webkit.Timer.twkFireTimerEvent(Native Method)
at com.sun.webpane.webkit.Timer.fireTimerEvent(Timer.java:66)
at com.sun.webpane.webkit.Timer.notifyTick(Timer.java:47)
- locked <0x0000000702462fb8> (a com.sun.webpane.webkit.Timer)
at javafx.scene.web.WebEngine$PulseTimer$2.pulse(WebEngine.java:915)
at com.sun.javafx.tk.Toolkit$5.run(Toolkit.java:363)
at com.sun.javafx.tk.Toolkit$5.run(Toolkit.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:361)
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:384)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:463)
at com.sun.javafx.tk.quantum.QuantumToolkit$9.run(QuantumToolkit.java:332)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:17)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:67)
at java.lang.Thread.run(Thread.java:745)
With the profiler i see that this is the most active method:
java.net.SocketInputStream.read(byte[], int, int, int)
Self time: 89242 ms (92,8%)
Invocations: 1322
The memory consumption seems to be stable, but a lot of GCs happen.
With ProcessExplorer i made a windows Stack-Dump of the two active threads:
Thread 1:
jvm.dll!JVM_FindSignal+0x9caa7
jvm.dll!JVM_ResolveClass+0x28551
jvm.dll!JVM_ResolveClass+0x1e994
jvm.dll!JVM_FindSignal+0x9c8e2
jvm.dll!JVM_ResolveClass+0x1eb75
jvm.dll!JNI_CreateJavaVM+0xb65
jvm.dll!JNI_CreateJavaVM+0xc136
jfxwebkit.dll!WTFReportBacktrace+0xec
jfxwebkit.dll!WTFReportBacktrace+0x946
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x48491
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x49055
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4d150
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4d96e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4de34
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x40643
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xbaf3e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xc063b
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xc4dbb
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xb9d87
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3d321
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x3e4dd
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4064e
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x27757
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xda63c
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x218191
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x21858d
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x70c4
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x8020
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x218018
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x105aae
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x118627
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x1246f2
jfxwebkit.dll!JSPropertyNameArrayGetCount+0xcd512
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x67d2
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x2bc34
jfxwebkit.dll!WTFReportBacktrace+0x30837
jfxwebkit.dll!WTFReportBacktrace+0x35722
jfxwebkit.dll!WTFReportBacktrace+0x15b8c
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x6a7b
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x6c7b
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x18855
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x130ef4
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x130fb7
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x1f7ce9
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x119b61
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x11a959
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xfd43
Thread 2:
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x51ffb
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x522ae
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x80904
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x522ae
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x4f0b5
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x8e850
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x8e9ae
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x218276
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x21858d
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x6e4d
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0x8020
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x218018
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x105aae
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x118627
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x1246f2
jfxwebkit.dll!JSPropertyNameArrayGetCount+0xcd512
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x67d2
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x2bc34
jfxwebkit.dll!WTFReportBacktrace+0x30837
jfxwebkit.dll!WTFReportBacktrace+0x35722
jfxwebkit.dll!WTFReportBacktrace+0x15b8c
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x6a7b
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x6c7b
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x18855
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x130ef4
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x130fb7
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_HTMLObjectElementImpl_checkValidityImpl+0x1f7ce9
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x119b61
jfxwebkit.dll!Java_com_sun_webpane_webkit_dom_EventListenerImpl_twkDispatchEvent+0x11a959
jfxwebkit.dll!Java_com_sun_webpane_webkit_network_URLLoader_twkDidReceiveResponse+0xfd43
It seems there are several threads (at least 3) that alternate in using the CPU.
2 are most active, while the others do only a little bit.
Then one of the active ones becomes inactive and another one becomes active.
Here is a sample app which connects to our testserver and produces the problem:
The "engine.executeScript" call is an attempt to register FirebugLite in the website to see what is happening, but this code is never executed since the page never reaches the SUCCEEDED state. For other working pages this embedding works fine.
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker.State;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javax.swing.JPanel;
import com.sun.javafx.runtime.VersionInfo;
public class JavaFXTest extends Applet
{
@Override
public void init()
{
setLayout(new BorderLayout());
final HTMLPanel htmlPanel = new HTMLPanel();
add(BorderLayout.CENTER, htmlPanel);
htmlPanel.loadURL("http://testserver.knuddels.de/logincheck.html?nick=JavaFX&pwd=ppp&setCookieInResponse=true");
htmlPanel.loadURL("http://testserver.knuddels.de", true);
}
private static class HTMLPanel extends JPanel
{
private static final long serialVersionUID = -6272445527425893706L;
private final JFXPanel jfxPanel = new JFXPanel();
private WebEngine engine;
private volatile boolean isInitialized;
public HTMLPanel()
{
super(new BorderLayout());
Platform.setImplicitExit(false);
}
private void initComponents()
{
if (!isInitialized)
{
this.isInitialized = true;
createScene();
this.add(jfxPanel, BorderLayout.CENTER);
}
}
private void createScene()
{
Platform.runLater(new Runnable()
{
public void run()
{
WebView view = new WebView();
engine = view.getEngine();
engine.getLoadWorker().exceptionProperty().addListener(new ChangeListener<Throwable>()
{
public void changed(ObservableValue<? extends Throwable> o, Throwable old, final Throwable value)
{
if (engine.getLoadWorker().getState() == State.FAILED)
{
System.out.println("Error on: " + engine.getLocation());
if (old != null)
{
old.printStackTrace();
}
if (value != null)
{
value.printStackTrace();
}
}
checkLoadUrls();
}
});
engine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>()
{
public void changed(ObservableValue<? extends State> o, State old, final State state)
{
if (state == State.SUCCEEDED)
{
System.out.println("Page loaded: " + engine.getLocation());
if (!checkLoadUrls())
{
engine.executeScript("if (!document.getElementById('FirebugLite')){E = document['createElement' + 'NS'] && document.documentElement.namespaceURI;E = E ? document['createElement' + 'NS'](E, 'script') : document['createElement']('script');E['setAttribute']('id', 'FirebugLite');E['setAttribute']('src', 'https://getfirebug.com/' + 'firebug-lite.js' + '#startOpened');E['setAttribute']('FirebugLite', '4');(document['getElementsByTagName']('head')[0] || document['getElementsByTagName']('body')[0]).appendChild(E);E = new Image;E['setAttribute']('src', 'https://getfirebug.com/' + '#startOpened');}");
}
}
}
});
jfxPanel.setScene(new Scene(view));
}
});
}
private static String toURL(String str)
{
try
{
return new URL(str).toExternalForm();
}
catch (MalformedURLException exception)
{
return null;
}
}
public void loadURL(final String url)
{
loadURL(url, false);
}
private List<String> urlsToLoad = new CopyOnWriteArrayList<String>();
public void loadURL(final String url, boolean queue)
{
if (queue)
{
urlsToLoad.add(url);
}
else
{
initComponents();
Platform.runLater(new Runnable()
{
public void run()
{
String tmp = toURL(url);
if (tmp == null)
{
tmp = toURL("http://" + url);
}
engine.load(tmp);
}
});
}
}
private boolean checkLoadUrls()
{
if (!urlsToLoad.isEmpty())
{
String url = urlsToLoad.remove(0);
loadURL(url);
return true;
}
return false;
}
}
public static void main(String[] args)
{
Frame f = new Frame("JavaFXTest: " + VersionInfo.getVersion());
f.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
f.setFont(new Font("Arial", Font.PLAIN, 16));
JavaFXTest app = new JavaFXTest();
f.add("Center", app);
app.init();
f.setSize(1024, 800);
f.setResizable(true);
f.setVisible(true);
}
}