0

Как исправить ошибку? Почему конкретно null? Мне надо динамическое обновление scene. Если purchase.setDisable(true); запихнуть в start то и вылезает ошибка а если в другое место то всё ок. Но как я говорил мне нужно динамическое обновление

ошибка

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml@18.0.1/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1857)
    at javafx.fxml@18.0.1/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1724)
    at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at javafx.base@18.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at javafx.base@18.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base@18.0.1/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base@18.0.1/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.base@18.0.1/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.graphics@18.0.1/javafx.scene.Node.fireEvent(Node.java:8797)
    at javafx.controls@18.0.1/javafx.scene.control.Button.fire(Button.java:203)
    at javafx.controls@18.0.1/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:208)
    at javafx.controls@18.0.1/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
    at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
    at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at javafx.base@18.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at javafx.base@18.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base@18.0.1/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base@18.0.1/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.base@18.0.1/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.graphics@18.0.1/javafx.scene.Scene$MouseHandler.process(Scene.java:3881)
    at javafx.graphics@18.0.1/javafx.scene.Scene.processMouseEvent(Scene.java:1874)
    at javafx.graphics@18.0.1/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2607)
    at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411)
    at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450)
    at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
    at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449)
    at javafx.graphics@18.0.1/com.sun.glass.ui.View.handleMouseEvent(View.java:551)
    at javafx.graphics@18.0.1/com.sun.glass.ui.View.notifyMouse(View.java:937)
    at javafx.graphics@18.0.1/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics@18.0.1/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:116)
    at java.base/java.lang.reflect.Method.invoke(Method.java:577)
    at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:77)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:577)
    at javafx.base@18.0.1/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml@18.0.1/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:84)
    at javafx.fxml@18.0.1/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1854)
    ... 46 more
Caused by: java.lang.NullPointerException: Cannot invoke "javafx.scene.control.Button.setDisable(boolean)" because "this.purchase" is null
    at com.marketplace.marketplace/com.marketplace.marketplace.MarketplaceApp.start(MarketplaceApp.java:46)
    at com.marketplace.marketplace/com.marketplace.marketplace.LoginProviderAplication.AuthProvider(LoginProviderAplication.java:48)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    ... 53 more

код

package com.marketplace.marketplace;

import com.marketplace.marketplace.models.Product; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.stage.Stage; import java.io.IOException; import java.util.NoSuchElementException;

public class MarketplaceApp { @FXML public Button addProduct, purchase, deleteProductButton = new Button();

@FXML
ListView<Product> list_products = new ListView<>();

@FXML
ListView<String> basket = new ListView<>();

@FXML
Label index_product = new Label();
public static ObservableList<String> arrayBasket = FXCollections.observableArrayList();

public static ObservableList<Product> arrayProducts = FXCollections.observableArrayList(
        new Product("1", 1, 1),
        new Product("2", 2, 2),
        new Product("3", 3, 3),
        new Product("4", 4, 4),
        new Product("5", 5, 5)
);


public void start(Stage stage) throws IOException {
    FXMLLoader fxmlLoader = new FXMLLoader(MarketplaceApp.class.getResource("marketplace.fxml"));
    stage.setScene(new Scene(fxmlLoader.load(), 900, 650));
    stage.setResizable(false);
    stage.setTitle("Маркетплейс" + getRole());
    stage.show();
    if (arrayBasket.size() == 0) {
        purchase.setDisable(true);
    }
}

public String getRole() {
    if(RegisterProviderAplication.getIsPurchase()) {
        return " (Поставщик)";
    } else {
        return " (Покупатель)";
    }
}

public void initialize() {
    listViewProducts();
    SelectionItemProduct();
    listViewBasket();
    SelectionItemBasket();
    addProduct.setVisible(RegisterUserAplication.getIsAddProduct());
    purchase.setVisible(RegisterProviderAplication.getIsPurchase());
}

public void listViewProducts() {
    list_products.setItems(arrayProducts);
}

public void listViewBasket() {
    basket.setItems(arrayBasket);
}

public static void addProductBasket(String name) {
    arrayBasket.add(name);
}

public static void addProduct(Product product) {
    arrayProducts.add(product);
}

public void SelectionItemProduct() {
    MultipleSelectionModel<Product> selectionModel = list_products.getSelectionModel();
    selectionModel.setSelectionMode(SelectionMode.MULTIPLE);
}

public void SelectionItemBasket() {
    MultipleSelectionModel<String> selectionModel = basket.getSelectionModel();
    selectionModel.setSelectionMode(SelectionMode.MULTIPLE);
}

@FXML
public void AddProduct() throws IOException {
    AddProductDialog.start(new Stage());
}

@FXML
public void AddBasket() {
    for (Product i: list_products.getSelectionModel().getSelectedItems()) {
        if (i.getNumberProduct() > 0) {
            arrayBasket.add(i.getName());
        }
    }
    index_product.setText(String.valueOf(arrayBasket.size()));
}

@FXML
public void RemoveBasket() {
    try {
        for (String i: basket.getSelectionModel().getSelectedItems()) {
            arrayBasket.remove(i);
        }
        index_product.setText(String.valueOf(arrayBasket.size()));
    } catch (NoSuchElementException noSuchElementException) {
        return;
    }
}

@FXML
public void Purchase() throws IOException {
    PurchaseDialog.start(new Stage());
}

@FXML
public void DeleteProductButton() {
    try {
        for (Product i: list_products.getSelectionModel().getSelectedItems()) {
            arrayProducts.remove(i);
        }
    } catch (NoSuchElementException noSuchElementException) {
        return;
    }
}

}

0 Answers0