javafx任务错误: NullPointerException

标签 java javafx-8

我编写了一段代码来解码 Base64 图像并在 javafx 中表示该图像。在我的 url base64 代码中不断变化。这就是我在 javafx 代码中使用任务的原因。但我收到错误: java.lang.NullPointerException: Children: child node is null: Parent = StackPane@583b7e6b

这是我的代码:

Java 文件

public String restService(){

    try{
    ObjectMapper mapper = new ObjectMapper();
    ObjectMapper mapper1 = new ObjectMapper();

    //@SuppressWarnings({ "resource", "deprecation" })
    HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet("");
    HttpResponse response = client.execute(request);

    BufferedReader reader1 = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
    String line = "";
    try{
    while ((line = reader1.readLine()) != null) {

    Status status = mapper.readValue(line, Status.class);
    String sessionID = status.getSessionId();

    String url = "";
    HttpGet request1 = new HttpGet(url);
    HttpResponse response1 = client.execute(request1);
    BufferedReader reader2 = new BufferedReader(new InputStreamReader(response1
                    .getEntity().getContent()));

    String line1 = "";
    while ((line1 = reader2.readLine()) != null) {
            Screen status1 = mapper1.readValue(line1, Screen.class);
            String value = status1.getValue();
            image = value;
            }

    }
    }
    catch (IOException e){
        System.out.println(e);
    }

    }

    catch (ClientProtocolException e){
        System.out.println("Client doesn't response");
    }
    catch (IOException e){
        System.out.println("Can't connect to server2");
    }
    return image;
}
public static void main(String[] args) throws ClientProtocolException,IOException, FileNotFoundException {
    RestCall test = new RestCall();
    String imageString = test.restService();
    System.out.println(imageString);




}

javafx 文件:

@Override
public void start(Stage primaryStage) {
    try {
        final Task<Void> task;
        task = new Task<Void>(){
            @Override
            protected Void call() throws Exception{
                while(true){
                    try{
                        RestCall rest = new RestCall();
                        String base_64 = rest.restService();
                        ByteArrayInputStream imageStream = decodeImage(base_64);
                        final Image screenImg = new Image(imageStream);

                        Platform.runLater(new Runnable(){
                            public void run() {                      

                                imgView.setImage(screenImg);
                                imgView.setFitWidth(468);
                                imgView.setFitHeight(620);
                                StackPane sp = new StackPane();
                                sp.getChildren().add(imgView);

                            }
                        });

                        Thread.sleep(2);    
                    }
                    catch (Exception e){
                        System.out.println("Image Not Found");
                    }

                }


            }
        };


        StackPane sp = new StackPane();
        sp.getChildren().add(imgView);

        Scene scene = new Scene(sp);
        primaryStage.setScene(scene);
        primaryStage.show();

        new Thread(task).start();




    } catch(Exception e) {
        System.out.println(e);
    }
}

/*public void show(){
    launch();
}*/

public static void main(String[] args) {
    /*Main main = new Main();
    main.show();*/
    launch(args);
}



public static ByteArrayInputStream decodeImage(String str){

    Base64 base64 = new Base64();
    ByteArrayInputStream screenInputStream = new ByteArrayInputStream(base64.decode(str));

    return screenInputStream;

}

}

最佳答案

好的,根据评论更改行:

 sp.getChildren().add(imgView);

至:

if(imgView == null){
  imgView = new imgView();
}

sp.getChildren().add(imgView);

你还需要改变

 Platform.runLater(new Runnable(){
    public void run() {                      

      imgView.setImage(screenImg);
      imgView.setFitWidth(468);
      imgView.setFitHeight(620);
      StackPane sp = new StackPane();
      sp.getChildren().add(imgView);
      }
});

至:

Platform.runLater(new Runnable(){
  public void run() {                      

     if(imgView == null)
       imgView = new imgView();
     imgView.setImage(screenImg);
     imgView.setFitWidth(468);
     imgView.setFitHeight(620);
     StackPane sp = new StackPane();
     sp.getChildren().add(imgView);
     }
});

关于javafx任务错误: NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32179108/

相关文章:

java - 方法 show(FragmentManager, String) 不适用于 show(FragmentManager, String) android?

java - 如何在 Slick2D 中对字体大小进行动画处理,而无需每次渲染创建新的字体实例?

java - 如何将 ObjectProperty<Date> 转换为 ObjectProperty<LocalDate>

javafx - FXML 设置 ButtonType onAction

Java keyPressed() 方法仅在玩家按下 Tab 后才起作用

java - 注册。作业级别的 spring 批处理作业的事务支持

java - DHGEX在Java 8下使用2048位 key 失败,但是在1024位 key 下成功

java - Vbox/Hbox 什么时候为它的 child 分配坐标?

Javafx- 鼠标单击事件可撤消上一次鼠标单击所做的操作

java - 在 JavaFX 上动态更新具有多个系列的条形图