Я создал программу JavaFX с F XML. Меня попросили превратить его в приложение Spring Boot. Я нашел этот сайт, чтобы помочь мне пройти через него с помощью WeaverFX. https://www.vojtechruzicka.com/javafx-spring-boot/ Я шаг за шагом следовал инструкциям и просматривал свой код, у меня все так же. Тем не менее я получаю сообщение об ошибке.
@Override
public void start(Stage stage) {
FxWeaver fxWeaver = applicationContext.getBean(FxWeaver.class);
Parent root = fxWeaver.loadView(MyController.class);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
2020-04-08 11:41:16.728 INFO 14512 --- [JavaFX-Launcher] o.s.boot.SpringApplication : Started application in 1.239 seconds (JVM running for 2.077)
Exception in Application start method
Exception in thread "main" 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$1(LauncherImpl.java:182)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.myprogram.attempttwo.controller.MyController' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:351)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:342)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1126)
at net.rgielen.fxweaver.core.FxWeaver.getBean(FxWeaver.java:295)
at net.rgielen.fxweaver.core.FxWeaver.lambda$load$1(FxWeaver.java:381)
at java.util.Optional.orElseGet(Optional.java:267)
at net.rgielen.fxweaver.core.FxWeaver.load(FxWeaver.java:381)
at net.rgielen.fxweaver.core.FxWeaver.loadView(FxWeaver.java:184)
at net.rgielen.fxweaver.core.FxWeaver.loadView(FxWeaver.java:125)
at net.rgielen.fxweaver.core.FxWeaver.loadView(FxWeaver.java:94)
at com.myprogram.attempttwo.application.JavaFxApplication.start(JavaFxApplication.java:29)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(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$3(WinApplication.java:177)
... 1 more
Кажется, что он не использует 'loadView', но я не знаю достаточно о Java, чтобы понять, почему это не так. Или, по крайней мере, вещи для проверки.
*** редактировать, показывая MyController.class для запроса
package com.myprogram.attempttwo.controller;
import com.myprogram.attempttwo.application.WeatherService;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import net.rgielen.fxweaver.core.FxmlView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
@FxmlView("main-stage.fxml")
public class MyController {
@FXML
private Label weatherLabel;
private WeatherService weatherService;
@Autowired
public MyController(WeatherService weatherService) {
this.weatherService = weatherService;
}
public void loadWeatherForecast(ActionEvent actionEvent) {
this.weatherLabel.setText(weatherService.getWeatherForecast());
}
}