Как исправить ошибку? Почему конкретно 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;
}
}
}