InvocationTargetException
никогда не является root проблемы. Это исключение выдается, когда метод вызывается через отражение, но сам метод выдает исключение. Исключение, выброшенное методом invoked-via-отражением, оборачивается (то есть причиной) InvocationTargetException
. Что такое трассировка стека и как я могу использовать ее для отладки ошибок моего приложения? Q & A предоставляет больше информации о трассировке стека и о том, как их читать.
Итак, если мы посмотрим на последний Caused by
в вашей трассировке стека, мы видим фундаментальную ошибку:
Caused by: javafx.fxml.LoadException: No controller specified.
/Users/kevintruong/maven-project/InventoryTracker/target/classes/com/flexus/InventoryTracker/primary.fxml:9
Примечание: Выходные данные, начинающиеся с "[ERROR] Command execution failed.
", начинаются с Maven, а не ваше приложение.
Теперь указание класса контроллера не всегда требуется; однако в вашем файле F XML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"
style="-fx-background-color: #FDFEFE;"
xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Button fx:id="signUp" layoutX="529.0" layoutY="14.0" mnemonicParsing="false"
onAction="#switchToSignUp" style="-fx-background-color: #FDFEFE;"
text="Sign up" textFill="#3498db" underline="true" />
</children>
</AnchorPane>
Вы определяете атрибут onAction
для элемента Button
. Это требует указания контроллера, где у контроллера есть соответствующий метод. Я вижу, у вас есть класс с именем PrimaryController
, у которого есть метод switchToSignUp()
, так что, похоже, вы просто забыли указать контроллер в своем файле F XML. Вам просто нужно добавить этот атрибут к элементу root:
<AnchorPane fx:controller="com.flexus.InventoryTracker.PrimaryController" ...>
...
</AnchorPane>
Примечание: После Java соглашений об именах , все имена пакетов должны быть строчными.
Если вы используете Scene Builder , вы можете указать контроллер, перейдя в раздел «Документ» на левой панели разверните панель «Контроллер» и введите имя класса контроллера в текстовое поле, помеченное «Класс контроллера».
Для получения дополнительной информации о F XML см. Введение в F XML .