Изучаю JavaFX, столкнулся с такой проблемой, не могу прогрузить FXML файлы, выдает Exception in Application start method
, жалуясь на строку, где происходит загрузка файла rootLayout = loader.load();
все происходит в одном классе, ниже код. Комментарии какие-никакие указаны, помогите разобраться в чем ошибка, и выдает исключение, вроде логически все правильно, добавлю то, что контроллер к PersonOverview.fxml
указан правильно, ко второму файлу контроллер не подключал еще, но как понимаю это не должно быть связанно, и путь к самим FXML файлам указан правильно
public class Main extends Application {
private Stage primaryStage; //создаем переменную типа Stage
private BorderPane rootLayout; //создаем переменную типа BorderPane
/**
* Данные, в виде наблюдаемого списка адресатов.
*/
private ObservableList<Person> personData = FXCollections.observableArrayList();
/**
* Конструктор
*/
public Main() {
}
/**
* Возвращает данные в виде наблюдаемого списка адресатов.
* @return
*/
public ObservableList<Person> getPersonData() {
return personData;
}
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("AddressApp");
initRootLayout();
showPersonOverview();
}
/**
* Инициализирует корневой макет.
*/
public void initRootLayout() {
try {
// Загружаем корневой макет из fxml файла.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/RootLayout.fxml"));
rootLayout = loader.load();
// Отображаем сцену, содержащую корневой макет.
Scene scene = new Scene(rootLayout);
primaryStage.setScene(scene);
primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Показывает в корневом макете сведения об адресатах.
*/
public void showPersonOverview() {
try {
// Загружаем сведения об адресатах.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/PersonOverview.fxml"));
AnchorPane personOverview = loader.load();
// Помещаем сведения об адресатах в центр корневого макета.
rootLayout.setCenter(personOverview);
// Даём контроллеру доступ к главному приложению.
PersonOverviewController controller = loader.getController();
controller.setMain(this);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Возвращает главную сцену.
* @return
*/
public Stage getPrimaryStage() {
return primaryStage;
}
public static void main(String[] args) {
launch(args);
}
}
Полный текст ошибки
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassCastException: javafx.scene.layout.AnchorPane cannot be cast to javafx.scene.layout.BorderPane
at address.Main.initRootLayout(Main.java:69)
at address.Main.start(Main.java:56)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
... 1 more
Exception running application address.Main
Судя по ошибке javafx.scene.layout.AnchorPane cannot be cast to javafx.scene.layout.BorderPane
в RootLayout.fxml
корневой элемент имеет тип AnchorPane
, а присвоить его вы пытаетесь полю rootLayout
имеющему тип BorderPane
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня по условию есть параметр который подается на вход хранимой процедурев Т/З записан как
При использовании данного кода выполняется только самый первый запрос, в чем может быть причина?