2015-08-10 2 views
1

Недавно добавление панели WebView в мое приложение JavaFX. При изменении размера моей программы я получаю эту ошибку, и программа зависает.WebView NullPointerException с использованием JavaFX

java.lang.NullPointerException 
    at com.sun.javafx.webkit.prism.WCPageBackBufferImpl.validate(WCPageBackBufferImpl.java:97) 
    at com.sun.webkit.WebPage.paint(WebPage.java:644) 
    at com.sun.javafx.sg.prism.NGWebView.renderContent(NGWebView.java:95) 
    at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2067) 
    at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1959) 
    at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) 
    at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) 
    at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2067) 
    at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1959) 
    at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) 
    at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) 
    at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2308) 
    at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2202) 
    at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2228) 
    at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2061) 
    at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1959) 
    at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) 
    at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) 
    at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2308) 
    at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2202) 
    at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2228) 
    at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2061) 
    at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1959) 
    at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:474) 
    at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:327) 
    at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 
    at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125) 
    at java.lang.Thread.run(Thread.java:745) 

Сайт о том, что WebView идет к тому,

http://www.abendigo.org/gui/

Может кто-нибудь сказать мне, что вызывает эту проблему?

Edit: Не знаю, почему это необходимо, но вот код по запросу:

public class Controller implements Initializable { 

    @FXML 
    public WebView webView; 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     webView.getEngine().load("http://abendigo.org/gui/"); 
    } 

} 

видео воспроизведения ошибка: https://youtu.be/6CLPt45AbW0

+0

Вы можете разместить код? Сообщение об ошибке может быть полезно только без кода. –

+0

Я не могу воспроизвести это. Какую версию и платформу JDK вы используете? Можете ли вы опубликовать свой код в форме [MCVE] (http://stackoverflow.com/help/mcve) –

+0

Я загрузил видео, в котором я сам воспроизвел ошибку. Также происходит на моем компьютере партнеров. –

ответ

2

Я столкнулся с такой же ошибкой. Это было довольно сложно найти. Наконец-то я нашел: webView layout throw nullPointerExpection, когда ширина или высота слишком велика, т.е. более 8500 пикселей.

И хорошее шунтирование было слишком ограничить MaxWidth/MaxHeight в WebView размера сцены:

sceneProperty().addListener(new ChangeListener<Scene>() { 

     @Override 
     public void changed(ObservableValue<? extends Scene> observable, Scene oldValue, Scene scene) { 
      if (scene != null) { 
       webView.setMaxSize(getScene().getWidth(), getScene().getHeight()); 
       webView.maxWidthProperty().bind(getScene().widthProperty()); 
       webView.maxHeightProperty().bind(getScene().heightProperty()); 
      } else { 
       webView.maxWidthProperty().unbind(); 
       webView.maxHeightProperty().unbind(); 
      } 
     } 
    }); 
1

я испытываю такой же вопрос, когда я пытаюсь расширить мой WebView со следующим

Примечание: Я запустить последнюю JDK 8u60

код

private void expandToContentHeight() { 
    try { 
     WebView webView = getWebview(); 


     String heightText = webView.getEngine().executeScript("document.body.offsetHeight").toString(); 
     double height = Double.valueOf(heightText.replace("px", "")); 
     Platform.runLater(new Runnable() { 

      @Override 
      public void run() { 
       System.out.println(height); 
       if (height != 0.0) 
        webView.setPrefHeight(height); 

      } 
     }); 
    } 
    catch (Exception ex) { 
     LOG.error(ex); 
     LOG.debug("Error occurred in method expandToContentHeight"); 
    } 

} 

проблема JIRA был записан на официальном Java JIRA: https://bugs.openjdk.java.net/browse/JDK-8133344

ли они серьезны, исправить будет в JDK 9 ???

Кто-нибудь нашел рабочее обходное решение для nullpointerexception?

+0

да, см. Мое обходное решение ниже – Daniel

Смежные вопросы