ошибка Cannot invoke "javafx.scene.layout.AnchorPane.setVisible(boolean)" because "this.profile_pan" is null

public void createPaneBusket(String name, String price, String imagePath, String idproduct) {
    if (isEnterProfile) {
        String numericValue = price.replaceAll("[^0-9]", ""); // Удаляем все символы, кроме цифр

        // Получаем URL-адрес ресурса из папки resources
        URL imageUrl = getClass().getResource(imagePath);
        URL imagePaneUrl = getClass().getResource("/com/my/app/app/icon/busket_pan.png");
        URL deleteIconUrl = getClass().getResource("/com/my/app/app/icon/delete_icon.png");
        Font font = Font.font("Comic Sans MS", FontWeight.BOLD, 14);

        // Проверяем, найден ли ресурс
        if (imageUrl == null && imagePaneUrl == null && deleteIconUrl == null) {
            System.err.println("Resource not found: " + imagePath);
            return;
        }


        AnchorPane pizzaPaneMain = new AnchorPane();
        pizzaPaneMain.setPrefSize(380, 80);

        // Создаем новый AnchorPane
        ImageView pizzaPane = new ImageView(new Image(imagePaneUrl.toExternalForm()));
        pizzaPane.prefWidth(380);
        pizzaPane.prefHeight(80); // Устанавливаем размеры AnchorPane

        // Создаем фото пиццы
        ImageView pizzaImage = new ImageView(new Image(imageUrl.toExternalForm()));
        pizzaImage.setFitWidth(75); // Устанавливаем ширину фото
        pizzaImage.setFitHeight(75); // Устанавливаем высоту фото
        AnchorPane.setTopAnchor(pizzaImage, 2.5); // Устанавливаем расположение фото
        AnchorPane.setLeftAnchor(pizzaImage, 2.5);

        // Создаем название пиццы
        Label nameLabel = new Label(name);
        nameLabel.setFont(font);
        AnchorPane.setTopAnchor(nameLabel, 0.0); // Устанавливаем расположение названия
        AnchorPane.setLeftAnchor(nameLabel, 110.0);

        // Создаем цену пиццы
        Label priceLabel = new Label(price);
        priceLabel.setFont(font);
        AnchorPane.setBottomAnchor(priceLabel, 0.0); // Устанавливаем расположение цены
        AnchorPane.setLeftAnchor(priceLabel, 110.0);

        ImageView deleteIcon = new ImageView(new Image(deleteIconUrl.toExternalForm()));
        deleteIcon.setFitWidth(40); // Устанавливаем ширину значка удаления
        deleteIcon.setFitHeight(40); // Устанавливаем высоту значка удаления
        AnchorPane.setTopAnchor(deleteIcon, 35.0); // Устанавливаем расположение значка удаления
        AnchorPane.setRightAnchor(deleteIcon, 10.0); // Устанавливаем расположение значка удаления

        // Добавляем обработчик событий для удаления элемента при нажатии на значок удаления
        deleteIcon.setOnMouseClicked(event -> {
            // Удаление соответствующего элемента из VBox или другого контейнера, который содержит все элементы корзины
            add_busket_vbox.getChildren().remove(pizzaPaneMain);
            priceBusket -= Integer.parseInt(numericValue);
            price_busket_label.setText(Integer.toString(priceBusket) + "₽");
            // Также здесь можно добавить логику для обновления общей суммы заказа, если это необходимо
            // Удаляем idproduct из строки productIds
            productIds = productIds.replace(idproduct + ",", ""); // Заменяем id с запятой на пустую строку
            productIds = productIds.replace(idproduct, ""); // Если idproduct находится в конце строки без запятой
        });

        // Добавляем элементы на AnchorPane
        pizzaPaneMain.getChildren().addAll(pizzaPane, pizzaImage, nameLabel, priceLabel, deleteIcon);

        // Добавляем AnchorPane в VBox
        add_busket_vbox.getChildren().add(pizzaPaneMain);
        priceBusket += Integer.parseInt(numericValue);
        price_busket_label.setText(Integer.toString(priceBusket) + "₽");
        productIds += idproduct + ","; // Добавляем idproduct с запятой к строке productIds
        System.out.println(productIds);
    } else {
        profile_pan.setVisible(true);
    }
}

Этот код находится в классе "Controller"

package com.my.app.app;

import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;

public class ProductItem extends AnchorPane {

    private ImageView productImage;
    private Label priceLabel;
    private Button addToCartButton;
    private Label nameLable;

    public ProductItem(String imagePath, String price, String productId, String name) {
        Controller controller = new Controller();

        Image image = new Image(getClass().getResourceAsStream(imagePath));

        productImage = new ImageView(image);
        productImage.setFitWidth(100); // Установка ширины изображения
        productImage.setFitHeight(100); // Установка высоты изображения


        priceLabel = new Label(price + " ₽");
        priceLabel.setFont(Font.font("Comic Sans MS", FontWeight.BOLD, 16)); // Установка шрифта и размера текста

        nameLable = new Label(name);
        nameLable.setFont(Font.font("Comic Sans MS", FontWeight.BOLD,13)); // Установка шрифта и размера текста
        nameLable.setTranslateX(110);

        addToCartButton = new Button("Добавить");
        addToCartButton.setStyle("-fx-background-color: #7b5acf; -fx-text-fill: white; -fx-font-size: 16px; -fx-font-family: 'Comic Sans MS';");

        addToCartButton.setOnAction(event -> {
            controller.createPaneBusket(name,price,imagePath,productId);
        });



        // StackPane для размещения изображений и других элементов
        StackPane stackPane = new StackPane();
        stackPane.getChildren().addAll(productImage,nameLable, priceLabel, addToCartButton);

        // Расположение элементов внутри StackPane
        StackPane.setAlignment(productImage, Pos.TOP_LEFT);
        StackPane.setAlignment(nameLable, Pos.TOP_LEFT);
        StackPane.setAlignment(priceLabel, Pos.BOTTOM_CENTER);
        StackPane.setAlignment(addToCartButton, Pos.BOTTOM_RIGHT);


        // Добавление StackPane на AnchorPane

        AnchorPane.setTopAnchor(stackPane, 0.0);
        AnchorPane.setLeftAnchor(stackPane, 0.0);
        AnchorPane.setRightAnchor(stackPane, 0.0);
        AnchorPane.setBottomAnchor(stackPane, 0.0);
        getChildren().add(stackPane);
    }

    private void addToCart(String productId) {
        // Реализуйте добавление товара в корзину по его productId
    }
}

При нажатии на кнопку:

addToCartButton.setOnAction(event -> {
            controller.createPaneBusket(name,price,imagePath,productId);
        });

Выскакивает ошибка:

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException: Cannot invoke "javafx.scene.layout.AnchorPane.setVisible(boolean)" because "this.profile_pan" is null


Ответы (0 шт):