【问题标题】:javafx webview crashes into color boxesjavafx webview崩溃到颜色框
【发布时间】:2013-12-16 09:47:53
【问题描述】:

在 javafx 中使用 webview 时,它会随机停止渲染并将所有内容切换为随机颜色框。 它向我吐出这个错误

"C:\Program Files\Java\jdk1.7.0_45\bin\java" -Didea.launcher.port=7533 "-Didea.launcher.bin.path=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 12.1.6\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_45\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\jfxrt.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\rt.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\ext\access-bridge.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\ext\zipfs.jar;C:\Users\Kodukas\IdeaProjects\Starling Browser\out\production\Starling Browser;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 12.1.6\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain net.makerimages.starling.src.Main
java.lang.NullPointerException
at com.sun.scenario.effect.impl.prism.ps.PPSDrawable.create(PPSDrawable.java:54)
at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.createCompatibleImage(PPSRenderer.java:148)
at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.createCompatibleImage(PPSRenderer.java:62)
at com.sun.scenario.effect.impl.ImagePool.checkOut(ImagePool.java:166)
at com.sun.scenario.effect.impl.Renderer.getCompatibleImage(Renderer.java:118)
at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.getCompatibleImage(PPSRenderer.java:153)
at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.getCompatibleImage(PPSRenderer.java:62)
at com.sun.scenario.effect.Effect.getCompatibleImage(Effect.java:491)
at com.sun.webpane.sg.prism.WCGraphicsPrismContext$Layer.<init>(WCGraphicsPrismContext.java:1169)
at com.sun.webpane.sg.prism.WCGraphicsPrismContext$ClipLayer.<init>(WCGraphicsPrismContext.java:1226)
at com.sun.webpane.sg.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:234)
at com.sun.webpane.platform.graphics.GraphicsDecoder.decode(GraphicsDecoder.java:205)
at com.sun.webpane.platform.graphics.WCRenderQueue.decode(WCRenderQueue.java:67)
at com.sun.webpane.platform.WebPage.paint2GC(WebPage.java:661)
at com.sun.webpane.platform.WebPage.paint(WebPage.java:640)
at com.sun.javafx.sg.prism.NGWebView.renderContent(NGWebView.java:71)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:201)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:40)
at com.sun.javafx.sg.BaseNode.render(BaseNode.java:1145)
at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:204)
at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:420)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:201)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:40)
at com.sun.javafx.sg.BaseNode.render(BaseNode.java:1145)
at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:117)
at com.sun.javafx.tk.quantum.AbstractPainter.paintImpl(AbstractPainter.java:188)
at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:73)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
at com.sun.prism.render.RenderJob.run(RenderJob.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:108)
at java.lang.Thread.run(Thread.java:744)
    java.lang.IllegalStateException: Unbalanced saveState/restoreState
at com.sun.webpane.sg.prism.WCGraphicsPrismContext.dispose(WCGraphicsPrismContext.java:1564)
at com.sun.webpane.sg.prism.WCPageBackBufferImpl.disposeGraphics(WCPageBackBufferImpl.java:32)
at com.sun.webpane.platform.WebPage.paint(WebPage.java:642)
at com.sun.javafx.sg.prism.NGWebView.renderContent(NGWebView.java:71)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:201)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:40)
at com.sun.javafx.sg.BaseNode.render(BaseNode.java:1145)
at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:204)
at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:420)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:201)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:40)
at com.sun.javafx.sg.BaseNode.render(BaseNode.java:1145)
at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:117)
at com.sun.javafx.tk.quantum.AbstractPainter.paintImpl(AbstractPainter.java:188)
at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:73)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
at com.sun.prism.render.RenderJob.run(RenderJob.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:108)
at java.lang.Thread.run(Thread.java:744)
    java.lang.NullPointerException
at com.sun.scenario.effect.impl.prism.ps.PPSDrawable.create(PPSDrawable.java:54)
at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.createCompatibleImage(PPSRenderer.java:148)
at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.createCompatibleImage(PPSRenderer.java:62)
at com.sun.scenario.effect.impl.ImagePool.checkOut(ImagePool.java:166)
at com.sun.scenario.effect.impl.Renderer.getCompatibleImage(Renderer.java:118)
at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.getCompatibleImage(PPSRenderer.java:153)
at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.getCompatibleImage(PPSRenderer.java:62)
at com.sun.scenario.effect.Effect.getCompatibleImage(Effect.java:491)
at com.sun.webpane.sg.prism.WCGraphicsPrismContext$Layer.<init>(WCGraphicsPrismContext.java:1169)
at com.sun.webpane.sg.prism.WCGraphicsPrismContext$ClipLayer.<init>(WCGraphicsPrismContext.java:1226)
at com.sun.webpane.sg.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:234)
at com.sun.webpane.platform.graphics.GraphicsDecoder.decode(GraphicsDecoder.java:205)
at com.sun.webpane.platform.graphics.WCRenderQueue.decode(WCRenderQueue.java:67)
at com.sun.webpane.platform.WebPage.paint2GC(WebPage.java:661)
at com.sun.webpane.platform.WebPage.paint(WebPage.java:640)
at com.sun.javafx.sg.prism.NGWebView.renderContent(NGWebView.java:71)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:201)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:40)
at com.sun.javafx.sg.BaseNode.render(BaseNode.java:1145)
at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:204)
at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:420)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:201)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:40)
at com.sun.javafx.sg.BaseNode.render(BaseNode.java:1145)
at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:117)
at com.sun.javafx.tk.quantum.AbstractPainter.paintImpl(AbstractPainter.java:188)
at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:73)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
at com.sun.prism.render.RenderJob.run(RenderJob.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:108)
at java.lang.Thread.run(Thread.java:744)
    java.lang.IllegalStateException: Unbalanced saveState/restoreState
at com.sun.webpane.sg.prism.WCGraphicsPrismContext.dispose(WCGraphicsPrismContext.java:1564)
at com.sun.webpane.sg.prism.WCPageBackBufferImpl.disposeGraphics(WCPageBackBufferImpl.java:32)
at com.sun.webpane.platform.WebPage.paint(WebPage.java:642)
at com.sun.javafx.sg.prism.NGWebView.renderContent(NGWebView.java:71)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:201)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:40)
at com.sun.javafx.sg.BaseNode.render(BaseNode.java:1145)
at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:204)
at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:420)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:201)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:40)
at com.sun.javafx.sg.BaseNode.render(BaseNode.java:1145)
at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:117)
at com.sun.javafx.tk.quantum.AbstractPainter.paintImpl(AbstractPainter.java:188)
at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:73)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
at com.sun.prism.render.RenderJob.run(RenderJob.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:108)
at java.lang.Thread.run(Thread.java:744)

    Process finished with exit code 0

这与我的代码无关,可以在这里看到:

package net.makerimages.starling.src;

import com.sun.webpane.platform.graphics.WCGraphicsContext;
import com.sun.webpane.sg.prism.WCGraphicsPrismContext;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.ToolBar;
import javafx.scene.image.Image;
import javafx.scene.input.KeyCode; 
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.scene.web.HTMLEditor;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import net.makerimages.starling.src.window.TopBar;

import java.util.logging.Level;
import java.util.logging.Logger;


public class Main extends Application {
  public static TextField addressBar;
  public static ToolBar toolBar;
  public static Stage stg;
  int height = 25;
public static WebView browser;
public static WebEngine webEngine;


@Override
public void start(Stage primaryStage) throws Exception{

     browser = new WebView();
     webEngine = browser.getEngine();
    toolBar=new ToolBar();
    toolBar.setPrefHeight(height);
    toolBar.setMinHeight(height);
    toolBar.setMaxHeight(height);
    toolBar.getItems().add(new TopBar());
     addressBar=new TextField("Enter a URL");
     addressBar.setId("addressBar");

    Logger logger = Logger.getLogger( WCGraphicsContext.class.getName() );
    logger.setLevel( Level.OFF);


    addressBar.setOnKeyPressed( new EventHandler<KeyEvent>() {
        public void handle(final KeyEvent keyEvent) {
            if (keyEvent.getCode() == KeyCode.ENTER) {
                loadWebsite(addressBar.getText());

                keyEvent.consume();
            }
        }
    });






    BorderPane root=new BorderPane();
    primaryStage.initStyle(StageStyle.UNDECORATED);
    primaryStage.getIcons().add(new Image("url:http://www.iconshock.com/img_jpg/SUNNYDAY/animals/jpg/32/starling_bird_icon.jpg"));
    primaryStage.setTitle("Starling Browser");
    primaryStage.setScene(new Scene(root, 800, 700));
    root.setBottom(addressBar);
    root.setAlignment(addressBar, Pos.BOTTOM_CENTER);
    root.setCenter(browser);


    root.getStylesheets().add(this.getClass().getResource("starlingElements.css").toExternalForm());
   root.setTop(toolBar);


    primaryStage.show();
    webEngine.load("http://www.google.com");

    stg=primaryStage;
}


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

 public static void loadWebsite(String url)
 {
    webEngine.load("http://"+ url);

 }
}

我没有办法让它停下来,有人能帮忙吗?

【问题讨论】:

    标签: webview javafx


    【解决方案1】:

    1.7.0u40 上运行时我看不到闪烁。你可以试试

    • 在 JDK 8 EA 上运行它以确保这是 JDK 7 特定的问题。
    • 删除样式表(我删除了这一行以使其可运行)。
    • 删除TopBar import 看看是否是这个原因(我没有,所以我删除了这一行)。

    【讨论】:

    • JDK 8 可以工作,但是页面上的图像(instagram 配置文件)打算每隔几秒刷新一次。完整的代码也可以在bitbucket.org/makerimages/starling-browser 看到
    • 我在 instagram 上查看了您的演示 - 渲染/浏览体验有点不同 - 它产生的 fps 较低,因此图像过渡不太平滑,但仅此而已。其他一切都一样,我认为没有严重的问题。 (这对于 WebView 作为一项技术来说非常棒!)我正在运行 JDK 8 b116。
    • 哦,但图像对我来说闪烁,似乎每隔几秒就会重新加载一次。有什么办法可以提高fps?
    • 忘了说,我在 Windows 8 x64 上运行,没有闪烁。所有平台似乎都支持 WebView 的 GPU 加速,因此在 instagram 上也可以通过切换到 CSS 过渡(如果它们不使用它们)来改善 fps 问题。这也很有用:stackoverflow.com/questions/10762979/… - 如果 x32 与 x64 的性能差异仍然存在,我不知道。
    • 我建议你向他们的 JIRA 提交错误:javafx-jira.kenai.com/login.jsp。 Oracle 的工作人员有大量工作要做,但如果得到优先考虑,这可能很快就会得到解决。
    猜你喜欢
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多