从一个窗口移到另一个窗口

时间:2020-03-09 19:43:41

标签: java javafx

编码新手,更不用说java和javaFX了。我不确定从主窗口移到任何其他窗口时我会陷入困境,可以使用一些帮助来解决它。

主窗口可以很好地打开,但是当尝试移动到任何其他屏幕时,例如AddPart,它会在页面底部显示错误日志。它对每个页面都执行此操作,因此我假设这与尝试加载页面的方式有关。

HomeWindowController:

package ViewController;

import Model.Inventory;
import static Model.Inventory.getPartInventory;
import static Model.Inventory.getProductInventory;
import static Model.Inventory.removePart;
import static Model.Inventory.removeProduct;
import static Model.Inventory.validatePartDelete;
import Model.Part;
import Model.Product;
import Software1C482.InventorySystem;
import java.io.IOException;
import java.net.URL;
import java.util.Optional;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;

import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.stage.Modality;
import javafx.stage.Stage;
/**
 * FXML Controller class
 *
 * @author Andrew
 */

//It's the home window.
public class HomeWindowController implements Initializable {

//Declaring the FXML parts.
    @FXML
    private TableView<Product> TableProduct;
    @FXML
    private TableColumn<Product, Integer> ProductID, ProductInventoryLevel;
    @FXML
    private TableColumn<Product, String> ProductName;
    @FXML
    private TableColumn<Product, Double> ProductPPU;
    @FXML
    private Button ButtonProductAdd;
    @FXML
    private Button ButtonProductModify;
    @FXML
    private Button ButtonProductDelete;
    @FXML
    private Button ButtonPartSearch;
    @FXML
    private TableView<Part> TablePart;
    @FXML
    private TableColumn<Part, Integer> PartID, PartInventoryLevel;
    @FXML
    private TableColumn<Part, String> PartName;
    @FXML
    private TableColumn<Part, Double> PartPPU;
    @FXML
    private TextField SearchFieldPart;
    @FXML
    private TextField SearchFieldProduct;

    private static Part modifyPart;
    private static int modifyPartIndex;
    private static Product modifyProduct;
    private static int modifyProductIndex;

    public static int partToModifyIndex() {
        return modifyPartIndex;
    }

    public static int productToModifyIndex() {
        return modifyProductIndex;
    }

    public HomeWindowController() {
    }

    @FXML
    void HomeExitClick(ActionEvent event) {

        Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
        alert.initModality(Modality.NONE);
        alert.setTitle("Confirmation");
        alert.setHeaderText("Confirm Exit");
        alert.setContentText("Are you sure you want to exit?");
        Optional<ButtonType> result = alert.showAndWait();

        if (result.get() == ButtonType.OK) {
            System.exit(0);
        } else {
            System.out.println("Please resume completing form.");
        }
    }

    @FXML
    void HomeAddPartClick(ActionEvent event) throws IOException {

        Parent addPart = FXMLLoader.load(getClass().getResource("AddPart.fxml"));
        Scene scene = new Scene(addPart);
        Stage window = (Stage) ((Node) event.getSource()).getScene().getWindow();
        window.setScene(scene);
        window.show();
    }

    @FXML
    void HomeAddProductClick(ActionEvent event) throws IOException {

        Parent addProducts = FXMLLoader.load(getClass().getResource("AddProduct.fxml"));
        Scene scene = new Scene(addProducts);
        Stage window = (Stage) ((Node) event.getSource()).getScene().getWindow();
        window.setScene(scene);
        window.show();
    }

    @FXML
    void HomeModifyPartClick(ActionEvent event) throws IOException {

        modifyPart = TablePart.getSelectionModel().getSelectedItem();
        modifyPartIndex = getPartInventory().indexOf(modifyPart);
        Parent modifyParts = FXMLLoader.load(getClass().getResource("ModifyPart.fxml"));
        Scene scene = new Scene(modifyParts);
        Stage window = (Stage) ((Node) event.getSource()).getScene().getWindow();
        window.setScene(scene);
        window.show();
    }

    @FXML
    void HomeModifyProductClick(ActionEvent event) throws IOException {

        modifyProduct = TableProduct.getSelectionModel().getSelectedItem();
        modifyProductIndex = getProductInventory().indexOf(modifyProduct);
        Parent modifyProducts = FXMLLoader.load(getClass().getResource("ModifyProduct.fxml"));
        Scene scene = new Scene(modifyProducts);
        Stage window = (Stage) ((Node) event.getSource()).getScene().getWindow();
        window.setScene(scene);
        window.show();
    }

    @FXML
    void HomeSearchProductsBtn(ActionEvent event) throws IOException {
        String searchProd = SearchFieldProduct.getText();
        int prodIndex = -1;
        if (Inventory.lookupProduct(searchProd) == -1) {
            Alert alert = new Alert(AlertType.INFORMATION);
            alert.setTitle("Search Error");
            alert.setHeaderText("Product not found.");
            alert.setContentText("The text entered does not match any Product.");
            alert.showAndWait();
        } else {
            prodIndex = Inventory.lookupProduct(searchProd);
            Product tempProd = Inventory.getProductInventory().get(prodIndex);
            ObservableList<Product> tempProdList = FXCollections.observableArrayList();
            tempProdList.add(tempProd);
            TableProduct.setItems(tempProdList);
        }
    }

    @FXML
    void HomeDeleteProductBtn(ActionEvent event) throws IOException {
        Product product = TableProduct.getSelectionModel().getSelectedItem();
        Alert alert = new Alert(AlertType.CONFIRMATION);
        alert.initModality(Modality.NONE);
        alert.setTitle("Confirm Delete");
        alert.setHeaderText("Confirm?");
        alert.setContentText("Are you sure you want to delete " + product.getProductName() + "?");
        Optional<ButtonType> result = alert.showAndWait();
        if (result.get() == ButtonType.OK) {
            removeProduct(product);
            updateProductTableView();
            System.out.println("Product " + product.getProductName() + " was removed.");
        } else {
            System.out.println("Product " + product.getProductName() + " was not removed.");
        }
    }

    @FXML
    void PartSearchOnAction(ActionEvent event) throws IOException {
        String searchPart = SearchFieldPart.getText();
        int partIndex = -1;
        if (Inventory.lookupPart(searchPart) == -1) {
            Alert alert = new Alert(AlertType.INFORMATION);
            alert.setTitle("Search Error");
            alert.setHeaderText("Part not found.");
            alert.setContentText("The text entered does not match any Part.");
            alert.showAndWait();
        } else {
            partIndex = Inventory.lookupPart(searchPart);
            Part tempPart = Inventory.getPartInventory().get(partIndex);
            ObservableList<Part> tempProdList = FXCollections.observableArrayList();
            tempProdList.add(tempPart);
            TablePart.setItems(tempProdList);
        }
    }

    @FXML
    void HomeDeletePartOnAction(ActionEvent event) throws IOException {
        Part part = TablePart.getSelectionModel().getSelectedItem();
        if (validatePartDelete(part)) {
            Alert alert = new Alert(AlertType.INFORMATION);
            alert.setTitle("Part Delete Error.");
            alert.setHeaderText("Part cannot be removed.");
            alert.setContentText("This part is used in a product.");
            alert.showAndWait();
        } else {
            Alert alert = new Alert(AlertType.CONFIRMATION);
            alert.initModality(Modality.NONE);
            alert.setTitle("Product Delete");
            alert.setHeaderText("Confirm?");
            alert.setContentText("Are you sure you want to delete " + part.getPartName() + "?");
            Optional<ButtonType> result = alert.showAndWait();

            if (result.get() == ButtonType.OK) {
                removePart(part);
                updatePartTableView();
                System.out.println("Part " + part.getPartName() + " was removed.");
            } else {
                System.out.println("Part " + part.getPartName() + " was not removed.");
            }
        }
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        PartID.setCellValueFactory(cellData -> cellData.getValue().partIDProperty().asObject());
        PartName.setCellValueFactory(cellData -> cellData.getValue().partNameProperty());
        PartInventoryLevel.setCellValueFactory(cellData -> cellData.getValue().partInvProperty().asObject());
        PartPPU.setCellValueFactory(cellData -> cellData.getValue().partPriceProperty().asObject());
        ProductID.setCellValueFactory(cellData -> cellData.getValue().productIDProperty().asObject());
        ProductName.setCellValueFactory(cellData -> cellData.getValue().productNameProperty());
        ProductInventoryLevel.setCellValueFactory(cellData -> cellData.getValue().productInvProperty().asObject());
        ProductPPU.setCellValueFactory(cellData -> cellData.getValue().productPriceProperty().asObject());
        updatePartTableView();
        updateProductTableView();
    }

    public void updatePartTableView() {
        TablePart.setItems(getPartInventory());
    }

    public void updateProductTableView() {
        TableProduct.setItems(getProductInventory());
    }

    public void setMainApp(InventorySystem mainApp) {
        updatePartTableView();
        updateProductTableView();
    }
}

AddPartController:

package ViewController;

import Model.InhousePart;
import Model.Inventory;
import Model.OutsourcedPart;
import Model.Part;
import javafx.scene.control.Label;
import java.io.IOException;
import java.net.URL;
import java.util.Optional;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;

import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.stage.Modality;
import javafx.stage.Stage;

/**
 * FXML Controller class
 *
 * @author Andrew
 */
public class AddPartController implements Initializable {

    @FXML
    private RadioButton APRadialInhouse;
    @FXML
    private RadioButton APRadialOutsourced;
    @FXML
    private TextField IDField;
    @FXML
    private TextField NameField;
    @FXML
    private TextField InvField;
    @FXML
    private TextField PPUField;
    @FXML
    private TextField SwapField;
    @FXML
    private TextField MinField;
    @FXML
    private TextField MaxField;
    @FXML
    private Button APSave;
    @FXML
    private Button APButtonCancel;
    @FXML
    private Label APSwapLabel;

    private boolean isOutsourced;
    private String exceptionMessage = new String();
    private int partID;

    /**
     * Initializes the controller class.
     */
    //Initialize Controller
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        partID = Inventory.getPartIDCount();
        IDField.setText("AUTO GEN: " + partID);
    }
    //Inhouse Radial
    @FXML
    private void AddPartsInHouseRadio(ActionEvent event) {
        isOutsourced = false;
        APSwapLabel.setText("Machine ID");
    }
    //Outsourced Radial
    @FXML
    private void APOutsourcedOnAction(ActionEvent event) {
        isOutsourced = true;
        APSwapLabel.setText("Company Name");
    }
    //Save Button
    @FXML
    private void APSaveOnAction(ActionEvent event) throws IOException {
        String partName = NameField.getText();
        String partInv = InvField.getText();
        String partPrice = PPUField.getText();
        String partMin = MinField.getText();
        String partMax = MaxField.getText();
        String partDyn = SwapField.getText();

        try {
            exceptionMessage = Part.isPartValid(partName, Integer.parseInt(partMin), Integer.parseInt(partMax), Integer.parseInt(partInv), Double.parseDouble(partPrice), exceptionMessage);
            if (exceptionMessage.length() > 0) {
                Alert alert = new Alert(AlertType.INFORMATION);
                alert.setTitle("Error Adding Part");
                alert.setHeaderText("Error");
                alert.setContentText(exceptionMessage);
                alert.showAndWait();
                exceptionMessage = "";
            } else {
                if (isOutsourced == false) {
                    InhousePart iPart = new InhousePart();

                    iPart.setPartID(partID);
                    iPart.setPartName(partName);
                    iPart.setPartPrice(Double.parseDouble(partPrice));
                    iPart.setPartInStock(Integer.parseInt(partInv));
                    iPart.setPartMin(Integer.parseInt(partMin));
                    iPart.setPartMax(Integer.parseInt(partMax));
                    iPart.setPartMachineID(Integer.parseInt(partDyn));
                    Inventory.addPart(iPart);
                } else {
                    OutsourcedPart oPart = new OutsourcedPart();

                    oPart.setPartID(partID);
                    oPart.setPartName(partName);
                    oPart.setPartPrice(Double.parseDouble(partPrice));
                    oPart.setPartInStock(Integer.parseInt(partInv));
                    oPart.setPartMin(Integer.parseInt(partMin));
                    oPart.setPartMax(Integer.parseInt(partMax));
                    oPart.setPartCompanyName(partDyn);
                    Inventory.addPart(oPart);
                }

                Parent partsSave = FXMLLoader.load(getClass().getResource("HomeWindow.fxml"));
                Scene scene = new Scene(partsSave);
                Stage window = (Stage) ((Node) event.getSource()).getScene().getWindow();
                window.setScene(scene);
                window.show();
            }
        } catch (NumberFormatException e) {
            Alert alert = new Alert(AlertType.INFORMATION);
            alert.setTitle("Error Adding Part");
            alert.setHeaderText("Error");
            alert.setContentText("Form contains blank fields.");
            alert.showAndWait();
        }
    }
    //Cancel Button
    @FXML
    private void APButtonCancelOnAction(ActionEvent event) throws IOException {

        Alert alert = new Alert(AlertType.CONFIRMATION);
        alert.initModality(Modality.NONE);
        alert.setTitle("Confirmation");
        alert.setHeaderText("Confirm Delete");
        alert.setContentText("Are you sure you want to delete part " + NameField.getText() + "?");
        Optional<ButtonType> result = alert.showAndWait();

        if (result.get() == ButtonType.OK) {
            Parent partsCancel = FXMLLoader.load(getClass().getResource("HomeWindow.fxml"));
            Scene scene = new Scene(partsCancel);
            Stage window = (Stage) ((Node) event.getSource()).getScene().getWindow();
            window.setScene(scene);
            window.show();
        } else {
            System.out.println("Cancel has been clicked.");
        }

    }
}

AddPart.FXML:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.Scene?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>

<Scene xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ViewController.AddPartController">
    <AnchorPane prefHeight="473.0" prefWidth="513.0">
      <children>
         <Label layoutX="24.0" layoutY="24.0" text="Add Part">
            <font>
               <Font size="18.0" />
            </font>
         </Label>
         <RadioButton fx:id="APRadialInhouse" layoutX="163.0" layoutY="29.0" mnemonicParsing="false" onAction="#AddPartsInHouseRadio" text="In-House">
      </RadioButton>
         <RadioButton fx:id="APRadialOutsourced" layoutX="283.0" layoutY="29.0" mnemonicParsing="false" onAction="#APOutsourcedOnAction" text="Outsourced" />
         <Label layoutX="80.0" layoutY="204.0" text="Inv" />
         <Label layoutX="80.0" layoutY="109.0" text="ID" />
         <Label layoutX="80.0" layoutY="158.0" text="Name" />
         <Label layoutX="80.0" layoutY="302.0" text="Max" />
         <Label layoutX="80.0" layoutY="251.0" text="Price/Cost" />
         <Label layoutX="253.0" layoutY="302.0" text="Min" />
         <Label fx:id="APSwapLabel" layoutX="82.0" layoutY="344.0" text="Machine ID" />
         <TextField fx:id="IDField" disable="true" editable="false" layoutX="179.0" layoutY="105.0" promptText="ID" />
         <TextField fx:id="NameField" layoutX="179.0" layoutY="154.0" promptText="Part Name" />
         <TextField fx:id="InvField" layoutX="179.0" layoutY="200.0" promptText="Inventory" />
         <TextField fx:id="PPUField" layoutX="179.0" layoutY="247.0" promptText="Price/Cost" />
         <TextField fx:id="SwapField" layoutX="182.0" layoutY="340.0" prefHeight="25.0" prefWidth="106.0" promptText="Company Name" />
         <TextField fx:id="MinField" layoutX="292.0" layoutY="298.0" prefHeight="22.0" prefWidth="62.0" promptText="Min" />
         <TextField fx:id="MaxField" layoutX="179.0" layoutY="298.0" prefHeight="22.0" prefWidth="62.0" promptText="Max" />
         <Button fx:id="APSave" layoutX="301.0" layoutY="407.0" mnemonicParsing="false" onAction="#APSaveOnAction" prefHeight="40.0" prefWidth="82.0" text="Save" />
         <Button fx:id="APButtonCancel" layoutX="399.0" layoutY="407.0" mnemonicParsing="false" onAction="#APButtonCancelOnAction" prefHeight="40.0" prefWidth="82.0" text="Cancel" />
      </children></AnchorPane>
</Scene>

错误代码:

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1787)
    at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8879)
    at javafx.controls/javafx.scene.control.Button.fire(Button.java:200)
    at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
    at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3851)
    at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579)
    at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1849)
    at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
    at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
    at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
    at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
    at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1782)
    ... 47 more
Caused by: java.lang.ClassCastException: class javafx.scene.Scene cannot be cast to class javafx.scene.Parent (javafx.scene.Scene and javafx.scene.Parent are in module javafx.graphics of loader 'app')
    at InventorySystem/ViewController.HomeWindowController.HomeAddPartClick(HomeWindowController.java:115)
    ... 58 more

1 个答案:

答案 0 :(得分:1)

这里的问题是将const files = Array.from(event.target.files) const file:any = files[0] const {data: {signedUrl}} = await axios.get('https://localhost:3000/signedUrlUpload') try { const resp = await fetch(signedUrl, { method: 'PUT', body: file, headers: { 'Content-Type': 'audio/wave' } }) console.log(resp); } catch (e) { console.error(e); }转换为Parent

为您提供两种解决方案:

1。将fxml根目录更改为Scene

例如,您的fxml像这样开始

Node

代替

<AnchorPane prefHeight="473.0" prefWidth="513.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ViewController.AddPartController">
      <children>
         <Label layoutX="24.0" layoutY="24.0" text="Add Part">
           ...

2。更改创建<Scene xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ViewController.AddPartController"> <AnchorPane prefHeight="473.0" prefWidth="513.0"> <children> <Label layoutX="24.0" layoutY="24.0" text="Add Part"> ... 的方式:

Scene

希望有帮助

相关问题