javafx程序冻结
这可能是JavaFX中的一个bug,我可能会提交一份报告,但我想首先了解更多关于它的信息,因为根据我的经验,一个不提供复制方法的bug是不会被忽略的。而且我真的很想为此找份工作 所以冻结是随机发生的,可能是我打开程序的第15次。它主要发生在节目开始时。该程序使用Java11和OpenJFX11。冻结发生在Windows上(可能也发生在Unix上,谁知道呢) java应用程序线程等待渲染完成,但渲染从未完成(此处可能以圆圈形式运行)。 以下是渲染线程的线程转储,该线程似乎在循环中运行:javafx程序冻结,java,multithreading,javafx,freeze,openjfx,Java,Multithreading,Javafx,Freeze,Openjfx,这可能是JavaFX中的一个bug,我可能会提交一份报告,但我想首先了解更多关于它的信息,因为根据我的经验,一个不提供复制方法的bug是不会被忽略的。而且我真的很想为此找份工作 所以冻结是随机发生的,可能是我打开程序的第15次。它主要发生在节目开始时。该程序使用Java11和OpenJFX11。冻结发生在Windows上(可能也发生在Unix上,谁知道呢) java应用程序线程等待渲染完成,但渲染从未完成(此处可能以圆圈形式运行)。 以下是渲染线程的线程转储,该线程似乎在循环中运行: Quan
QuantumRenderer-0 Runnable CPU usage on sample: 1s
com.sun.marlin.DHelpers.subdivideAt(double, double[], int, double[], int, double[], int, int) DHelpers.java:419
com.sun.marlin.DDasher.somethingTo(int) DDasher.java:410
com.sun.marlin.DDasher.curveTo(double, double, double, double, double, double) DDasher.java:749
com.sun.prism.impl.shape.DMarlinPrismUtils.feedConsumer(DRendererContext, Path2D, BaseTransform, DPathConsumer2D) DMarlinPrismUtils.java:561
com.sun.prism.impl.shape.DMarlinPrismUtils.setupRenderer(DRendererContext, Shape, BasicStroke, BaseTransform, Rectangle, boolean) DMarlinPrismUtils.java:286
com.sun.prism.impl.shape.DMarlinRasterizer.getMaskData(Shape, BasicStroke, RectBounds, BaseTransform, boolean, boolean) DMarlinRasterizer.java:86
com.sun.prism.impl.shape.ShapeUtil.rasterizeShape(Shape, BasicStroke, RectBounds, BaseTransform, boolean, boolean) ShapeUtil.java:64
com.sun.prism.impl.ps.BaseShaderGraphics.renderShape(Shape, BasicStroke, float, float, float, float) BaseShaderGraphics.java:463
com.sun.prism.impl.BaseGraphics.draw(Shape) BaseGraphics.java:402
com.sun.javafx.webkit.prism.WCGraphicsPrismContext$17.doPaint(Graphics) WCGraphicsPrismContext.java:1761
com.sun.javafx.webkit.prism.WCGraphicsPrismContext$Composite.paint(Graphics) WCGraphicsPrismContext.java:1512
com.sun.javafx.webkit.prism.WCGraphicsPrismContext$Composite.paint() WCGraphicsPrismContext.java:1497
com.sun.javafx.webkit.prism.WCGraphicsPrismContext.strokePath(WCPath) WCGraphicsPrismContext.java:1764
com.sun.webkit.graphics.GraphicsDecoder.decode(WCGraphicsManager, WCGraphicsContext, BufferData) GraphicsDecoder.java:278
com.sun.webkit.graphics.WCRenderQueue.decode(WCGraphicsContext) WCRenderQueue.java:92
com.sun.webkit.WebPage.paint2GC(WCGraphicsContext) WebPage.java:734
com.sun.webkit.WebPage.paint(WCGraphicsContext, int, int, int, int) WebPage.java:701
com.sun.javafx.sg.prism.web.NGWebView.renderContent(Graphics) NGWebView.java:96
com.sun.javafx.sg.prism.NGNode.doRender(Graphics) NGNode.java:2072
com.sun.javafx.sg.prism.NGNode.render(Graphics) NGNode.java:1964
com.sun.javafx.sg.prism.NGGroup.renderContent(Graphics) NGGroup.java:270
com.sun.javafx.sg.prism.NGRegion.renderContent(Graphics) NGRegion.java:578
com.sun.javafx.sg.prism.NGNode.doRender(Graphics) NGNode.java:2072
com.sun.javafx.sg.prism.NGNode.render(Graphics) NGNode.java:1964
com.sun.javafx.sg.prism.NGGroup.renderContent(Graphics) NGGroup.java:270
com.sun.javafx.sg.prism.NGRegion.renderContent(Graphics) NGRegion.java:578
com.sun.javafx.sg.prism.NGNode.renderForClip(Graphics) NGNode.java:2313
com.sun.javafx.sg.prism.NGNode.renderRectClip(Graphics, NGRectangle) NGNode.java:2207
com.sun.javafx.sg.prism.NGNode.renderClip(Graphics) NGNode.java:2233
com.sun.javafx.sg.prism.NGNode.doRender(Graphics) NGNode.java:2066
com.sun.javafx.sg.prism.NGNode.render(Graphics) NGNode.java:1964
com.sun.javafx.sg.prism.NGGroup.renderContent(Graphics) NGGroup.java:270
com.sun.javafx.sg.prism.NGRegion.renderContent(Graphics) NGRegion.java:578
com.sun.javafx.sg.prism.NGNode.doRender(Graphics) NGNode.java:2072
com.sun.javafx.sg.prism.NGNode.render(Graphics) NGNode.java:1964
com.sun.javafx.sg.prism.NGGroup.renderContent(Graphics) NGGroup.java:270
com.sun.javafx.sg.prism.NGRegion.renderContent(Graphics) NGRegion.java:578
com.sun.javafx.sg.prism.NGNode.doRender(Graphics) NGNode.java:2072
com.sun.javafx.sg.prism.NGNode.render(Graphics) NGNode.java:1964
com.sun.javafx.sg.prism.NGGroup.renderContent(Graphics) NGGroup.java:270
com.sun.javafx.sg.prism.NGRegion.renderContent(Graphics) NGRegion.java:578
com.sun.javafx.sg.prism.NGNode.doRender(Graphics) NGNode.java:2072
com.sun.javafx.sg.prism.NGNode.render(Graphics) NGNode.java:1964
com.sun.javafx.sg.prism.NGGroup.renderContent(Graphics) NGGroup.java:270
com.sun.javafx.sg.prism.NGRegion.renderContent(Graphics) NGRegion.java:578
com.sun.javafx.sg.prism.NGNode.doRender(Graphics) NGNode.java:2072
com.sun.javafx.sg.prism.NGNode.render(Graphics) NGNode.java:1964
com.sun.javafx.sg.prism.NGGroup.renderContent(Graphics) NGGroup.java:270
com.sun.javafx.sg.prism.NGRegion.renderContent(Graphics) NGRegion.java:578
com.sun.javafx.sg.prism.NGNode.doRender(Graphics) NGNode.java:2072
com.sun.javafx.sg.prism.NGNode.render(Graphics) NGNode.java:1964
com.sun.javafx.sg.prism.NGGroup.renderContent(Graphics) NGGroup.java:270
com.sun.javafx.sg.prism.NGRegion.renderContent(Graphics) NGRegion.java:578
com.sun.javafx.sg.prism.NGNode.doRender(Graphics) NGNode.java:2072
com.sun.javafx.sg.prism.NGNode.render(Graphics) NGNode.java:1964
com.sun.javafx.sg.prism.NGGroup.renderContent(Graphics) NGGroup.java:270
com.sun.javafx.sg.prism.NGRegion.renderContent(Graphics) NGRegion.java:578
com.sun.javafx.sg.prism.NGNode.doRender(Graphics) NGNode.java:2072
com.sun.javafx.sg.prism.NGNode.render(Graphics) NGNode.java:1964
com.sun.javafx.sg.prism.NGGroup.renderContent(Graphics) NGGroup.java:270
com.sun.javafx.sg.prism.NGRegion.renderContent(Graphics) NGRegion.java:578
com.sun.javafx.sg.prism.NGNode.doRender(Graphics) NGNode.java:2072
com.sun.javafx.sg.prism.NGNode.render(Graphics) NGNode.java:1964
com.sun.javafx.tk.quantum.ViewPainter.doPaint(Graphics, NodePath) ViewPainter.java:479
com.sun.javafx.tk.quantum.ViewPainter.paintImpl(Graphics) ViewPainter.java:328
com.sun.javafx.tk.quantum.PresentingPainter.run() PresentingPainter.java:91
java.util.concurrent.Executors$RunnableAdapter.call() Executors.java:514
java.util.concurrent.FutureTask.runAndReset() FutureTask.java:305
com.sun.javafx.tk.RenderJob.run() RenderJob.java:58
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) ThreadPoolExecutor.java:1135
java.util.concurrent.ThreadPoolExecutor$Worker.run() ThreadPoolExecutor.java:635
com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run() QuantumRenderer.java:125
java.lang.Thread.run() Thread.java:844
和一个应用程序线程:
JavaFX Application Thread Waiting CPU usage on sample: 0ms
jdk.internal.misc.Unsafe.park(boolean, long) Unsafe.java (native)
java.util.concurrent.locks.LockSupport.park(Object) LockSupport.java:194
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt() AbstractQueuedSynchronizer.java:883
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(int) AbstractQueuedSynchronizer.java:1037
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(int) AbstractQueuedSynchronizer.java:1343
java.util.concurrent.CountDownLatch.await() CountDownLatch.java:232
com.sun.javafx.tk.quantum.PaintCollector.waitForRenderingToComplete() PaintCollector.java:157
com.sun.javafx.tk.quantum.GlassScene.waitForRenderingToComplete() GlassScene.java:122
javafx.scene.Scene$ScenePulseListener.pulse() Scene.java:2528
com.sun.javafx.tk.Toolkit.lambda$runPulse$2(TKPulseListener) Toolkit.java:410
com.sun.javafx.tk.Toolkit$$Lambda$941.run()
java.security.AccessController.doPrivileged(PrivilegedAction, AccessControlContext) AccessController.java (native)
com.sun.javafx.tk.Toolkit.runPulse(TKPulseListener, AccessControlContext) Toolkit.java:409
com.sun.javafx.tk.Toolkit.firePulse() Toolkit.java:436
com.sun.javafx.tk.quantum.QuantumToolkit.pulse(boolean) QuantumToolkit.java:518
com.sun.javafx.tk.quantum.QuantumToolkit.pulse() QuantumToolkit.java:498
com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue() QuantumToolkit.java:491
com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11() QuantumToolkit.java:319
com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$98.run()
com.sun.glass.ui.InvokeLaterDispatcher$Future.run() InvokeLaterDispatcher.java:96
com.sun.glass.ui.win.WinApplication._runLoop(Runnable) WinApplication.java (native)
com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(int, Runnable) WinApplication.java:175
com.sun.glass.ui.win.WinApplication$$Lambda$94.run()
java.lang.Thread.run() Thread.java:844
这里是cpu评测的屏幕截图:
以及包含相应数据的文件:
我可以试着了解更多吗?我想知道是什么UI元素导致了这一点,这样我就可以创建一个最小的可复制示例。我们加载的网站似乎有一个加载动画:
<div id="imageLoadingDiv">
<style>
.loader {
width: 100px;
height: 100px;
}
.circular{
animation: rotate 2s linear infinite;
height: 100px;
position: relative;
width: 100px;
}
.path {
stroke-dasharray: 1px,200px;
stroke-dashoffset: 0;
animation:
dash 1.5s ease-in-out infinite,
color 6s ease-in-out infinite
;
stroke-linecap: round;
}
@keyframes rotate{
100%{
transform: rotate(360deg);
}
}
@keyframes dash{
0%{
stroke-dasharray: 1px,200px;
stroke-dashoffset: 0;
}
50%{
stroke-dasharray: 89px,200px;
stroke-dashoffset: -35;
}
100%{
stroke-dasharray: 89px,200px;
stroke-dashoffset: -124;
}
}
@keyframes color{
100%, 0%{
stroke: #d62d20;
}
40%{
stroke: #0057e7;
}
66%{
stroke: #008744;
}
80%, 90%{
stroke: #ffa700;
}
}
</style>
<div class="loader">
<svg class="circular">
<circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"/>
</svg>
</div>
</div>
.加载器{
宽度:100px;
高度:100px;
}
.通告{
动画:旋转2s线性无限;
高度:100px;
位置:相对位置;
宽度:100px;
}
.路径{
行程阵列:1px,200px;
笔划偏移:0;
动画:
破折号1.5s缓进缓出无限,
颜色6s轻松输入输出无限
;
笔划线头:圆形;
}
@关键帧旋转{
100%{
变换:旋转(360度);
}
}
@关键帧破折号{
0%{
行程阵列:1px,200px;
笔划偏移:0;
}
50%{
行程:89px,200px;
行程偏移:-35;
}
100%{
行程:89px,200px;
行程偏移:-124;
}
}
@关键帧颜色{
100%, 0%{
行程:#d62d20;
}
40%{
行程:#0057e7;
}
66%{
行程:#008744;
}
80%, 90%{
行程:#ffa700;
}
}
替换它似乎可以消除问题。从stacktrace判断,它似乎与webviewA相关,这将是有用的;尝试删除尽可能多的代码,同时仍然能够重现问题,然后在问题中包含该代码。用于测试的类似精简HTML文件也很有用,