没有映射 fxml 这段代码完美运行并加载 fxml
如果我映射 fxml 获取异常我尝试了很多但无法理解是什么问题.....
SpringFxmlLoader 类方法 load() 返回语句不返回任何内容,因为我认为会发生异常
javafx.fxml.LoadException:/E:/aa/JavaFXwithSpringBoot/bin/test/spring/boot/LoginPage.fxml:15
在 javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601) 在 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579) 在 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java.2441) 在 javaf FXMLLoader。 (FXMLLoader.java:2409) at test.spring.boot.config.SpringFXMLLoader.load(SpringFXMLLoader.java:34) at test.spring.boot.config.StageManager.loadViewNodeHierarchy(StageManager.java:80) at test .spring。 boot.config.StageManager.switchScene(StageManager.java:31) at test.spring.boot.Main.displayInitialScene(Main.java:35) at test.spring.boot.Main.start(Main.java:24) at com .sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 在 com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java.sun:326) 在 com javafx.application .PlatformImpl.lambda$null$173(PlatformImpl.java:295) 在 java.security。AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)在 com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 在 com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 在 java.lang.Thread.run (来源不明)由:org.springframework.beans.factory.NoSuchBeanDefinitionException:在 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java) 上没有可用的“test.spring.boot.LoginPageController”类型的合格 bean :353) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340) 在 org.springframework.context.support.AbstractApplicationContext。getBean(AbstractApplicationContext.java:1090) 在 javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:929) 在 javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) 在 javafx.fxml.FXMLLoader$Element .processStartElement(FXMLLoader.java:220) 在 javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) 在 javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707) 在 javafx.fxml.FXMLLoader.loadImpl( FXMLLoader.java:2527) ... 应用程序启动方法 2017-10-24 17:18:03.779 ERROR 6416 --- [lication Thread] test.spring.boot.config.StageManager 中的另外 16 个异常:无法加载 FXML 视图>> /test/spring/boot/LoginPage.fxmlFXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) 在 javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220) 在 javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) 在 javafx.fxml .FXMLLoader.processStartElement(FXMLLoader.java:2707) 在 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) ... 16 应用程序启动方法中的更多异常 2017-10-24 17:18:03.779 错误 6416 -- - [lication Thread] test.spring.boot.config.StageManager : 无法加载 FXML 视图 >> /test/spring/boot/LoginPage.fxmlFXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) 在 javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220) 在 javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) 在 javafx.fxml .FXMLLoader.processStartElement(FXMLLoader.java:2707) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) ... 16 应用程序启动方法中的更多异常 2017-10-24 17:18:03.779 错误 6416 -- - [lication Thread] test.spring.boot.config.StageManager : 无法加载 FXML 视图 >> /test/spring/boot/LoginPage.fxmlfxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) ... 应用程序启动方法 2017-10-24 17:18:03.779 错误 6416 --- [lication Thread] test.spring.boot.config.StageManager 中还有 16 个异常: 无法加载 FXML 视图 >> /test/spring/boot/LoginPage.fxmlfxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) ... 应用程序启动方法 2017-10-24 17:18:03.779 错误 6416 --- [lication Thread] test.spring.boot.config.StageManager 中还有 16 个异常: 无法加载 FXML 视图 >> /test/spring/boot/LoginPage.fxml
org.springframework.beans.factory.NoSuchBeanDefinitionException: org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:353) ~[spring- beans-4.3.11.RELEASE.jar:4.3.11.RELEASE] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340) ~[spring-beans-4.3.11.RELEASE.jar :4.3.11.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1090) ~[spring-context-4.3.11.RELEASE.jar:4.3.11.RELEASE] 在 javafx.fxml .FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:929) ~[jfxrt.jar:na] 在 javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) ~[jfxrt.jar:na] 在 javafx。fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220) ~[jfxrt.jar:na] 在 javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) ~[jfxrt.jar:na] 在 javafx。 fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707) ~[jfxrt.jar:na] 在 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) ~[jfxrt.jar:na] 在 javafx.fxml.FXMLLoader。 loadImpl(FXMLLoader.java:2441) ~[jfxrt.jar:na] 在 javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409) ~[jfxrt.jar:na] 在 test.spring.boot.config.SpringFXMLLoader。 load(SpringFXMLLoader.java:34) ~[bin/:na] at test.spring.boot.config.StageManager.loadViewNodeHierarchy(StageManager.java:80) [bin/:na] at test.spring.boot.config.StageManager .switchScene(StageManager.java:31) [bin/:na] at test.spring.boot.Main.displayInitialScene(Main.java:35) [bin/:na] at test.spring.boot.Main.start(Main .java:24) [bin/:na] 在 com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) [jfxrt.jar:na] 在 com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java :326) ~[jfxrt.jar:na] 在 com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) ~[jfxrt.jar:na] 在 java.security.AccessController.doPrivileged(本机方法)~[na:1.8.0_131] 在 com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) ~[jfxrt.jar:na] 在 com.sun.glass.ui。 InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) ~[jfxrt.jar:na] at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[jfxrt.jar:na] at com.sun .glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) ~[jfxrt.jar:na] 在 java.lang.Thread.run(Unknown Source) ~[na:1.8.0_131]application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) [jfxrt.jar:na] 在 com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) ~[jfxrt.jar: na] 在 com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) ~[jfxrt.jar:na] 在 java.security.AccessController.doPrivileged(Native Method) ~[na:1.8. 0_131] 在 com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) ~[jfxrt.jar:na] 在 com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java :95) ~[jfxrt.jar:na] 在 com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[jfxrt.jar:na] 在 com.sun.glass.ui.win.WinApplication。 lambda$null$148(WinApplication.java:191) ~[jfxrt.jar:na] 在 java.lang.Thread.run(Unknown Source) ~[na:1.8.0_131]application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) [jfxrt.jar:na] 在 com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) ~[jfxrt.jar: na] 在 com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) ~[jfxrt.jar:na] 在 java.security.AccessController.doPrivileged(Native Method) ~[na:1.8. 0_131] 在 com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) ~[jfxrt.jar:na] 在 com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java :95) ~[jfxrt.jar:na] 在 com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[jfxrt.jar:na] 在 com.sun.glass.ui.win.WinApplication。 lambda$null$148(WinApplication.java:191) ~[jfxrt.jar:na] 在 java.lang.Thread.run(Unknown Source) ~[na:1.8.0_131]lambda$launchApplication1$162(LauncherImpl.java:863) [jfxrt.jar:na] 在 com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) ~[jfxrt.jar:na] 在 com .sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) ~[jfxrt.jar:na] 在 java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_131] 在 com .sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) ~[jfxrt.jar:na] 在 com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) ~ [jfxrt.jar:na] 在 com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[jfxrt.jar:na] 在 com.sun.glass.ui.win.WinApplication.lambda$null$148 (WinApplication.java:191) ~[jfxrt.jar:na] 在 java.lang.Thread.run(Unknown Source) ~[na:1.8.0_131]lambda$launchApplication1$162(LauncherImpl.java:863) [jfxrt.jar:na] 在 com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) ~[jfxrt.jar:na] 在 com .sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) ~[jfxrt.jar:na] 在 java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_131] 在 com .sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) ~[jfxrt.jar:na] 在 com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) ~ [jfxrt.jar:na] 在 com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[jfxrt.jar:na] 在 com.sun.glass.ui.win.WinApplication.lambda$null$148 (WinApplication.java:191) ~[jfxrt.jar:na] 在 java.lang.Thread.run(Unknown Source) ~[na:1.8.0_131]lambda$runAndWait$175(PlatformImpl.java:326) ~[jfxrt.jar:na] 在 com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) ~[jfxrt.jar:na] 在java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_131] at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) ~[jfxrt.jar:na] at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) ~[jfxrt.jar:na] at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[jfxrt. jar:na] 在 com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) ~[jfxrt.jar:na] 在 java.lang.Thread.run(Unknown Source) ~[ na:1.8.0_131]lambda$runAndWait$175(PlatformImpl.java:326) ~[jfxrt.jar:na] 在 com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) ~[jfxrt.jar:na] 在java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_131] at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) ~[jfxrt.jar:na] at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) ~[jfxrt.jar:na] at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[jfxrt. jar:na] 在 com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) ~[jfxrt.jar:na] 在 java.lang.Thread.run(Unknown Source) ~[ na:1.8.0_131]doPrivileged(Native Method) ~[na:1.8.0_131] 在 com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) ~[jfxrt.jar:na] 在 com.sun.glass。 ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) ~[jfxrt.jar:na] 在 com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[jfxrt.jar:na] 在 com .sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) ~[jfxrt.jar:na] 在 java.lang.Thread.run(Unknown Source) ~[na:1.8.0_131]doPrivileged(Native Method) ~[na:1.8.0_131] 在 com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) ~[jfxrt.jar:na] 在 com.sun.glass。 ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) ~[jfxrt.jar:na] 在 com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[jfxrt.jar:na] 在 com .sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) ~[jfxrt.jar:na] 在 java.lang.Thread.run(Unknown Source) ~[na:1.8.0_131]lambda$null$148(WinApplication.java:191) ~[jfxrt.jar:na] 在 java.lang.Thread.run(Unknown Source) ~[na:1.8.0_131]lambda$null$148(WinApplication.java:191) ~[jfxrt.jar:na] 在 java.lang.Thread.run(Unknown Source) ~[na:1.8.0_131]
2017-10-24 17:18:03.846 INFO 6416 --- [lication Thread] scaAnnotationConfigApplicationContext:关闭 org.springframework.context.annotation.AnnotationConfigApplicationContext@f096164:启动日期 [10 月 24 日星期二:127:11];IST 上下文层次结构的根 2017-10-24 17:18:03.848 INFO 6416 --- [lication Thread] osjeaAnnotationMBeanExporter :在 sun.reflect.NativeMethodAccessorImplative MethodAccessorImplative MethodAccessorImplative MethodAccessorImplative MethodAccessorImplative MethodAccessorImplative MethodAccessorImplative MethodAccessorImplative MethodAccessorImplative MethodAccessorImplative ) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.sun.javafx.application.LauncherImpl。 launchApplicationWithArgs(LauncherImpl.java:389) 在 com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:
主程序
@ComponentScan("test.spring.boot")
@SpringBootApplication
public class Main extends Application {
protected ConfigurableApplicationContext springContext;
protected StageManager stageManager;
@Override
public void start(Stage primaryStage) throws IOException {
stageManager = springContext.getBean(StageManager.class, primaryStage);
displayInitialScene();
}
@Override
public void init() throws Exception
{
springContext=springBootApplicationContext();
}
protected void displayInitialScene() {
stageManager.switchScene(FxmlView.LOGIN);
}
@Override
public void stop() throws Exception {
springContext.close();
}
private ConfigurableApplicationContext springBootApplicationContext() {
SpringApplicationBuilder builder = new SpringApplicationBuilder(Main.class);
String[] args = getParameters().getRaw().stream().toArray(String[]::new);
return builder.run(args);
}
public static void main(String[] args) {
Application.launch(args);
}
}
控制器.java
public class LoginPageController implements Initializable{
@FXML
private TextField txtUserName;
@FXML
private PasswordField txtPassward;
@FXML
private Button btnLogin;
@FXML
private Label lblLogin;
@Autowired
private UserService userService;
@Lazy
@Autowired
private StageManager stageManager;
@FXML
public void login()
{
if(userService.authenticate(txtUserName.getText(), txtPassward.getText()))
{
stageManager.switchScene(FxmlView.USER);
}
else
{
lblLogin.setText("Login Failed.");
}
}
@Override
public void initialize(URL location, ResourceBundle resources) {
}
}
视图文件
public enum FxmlView {
USER {
@Override
public String getTitle() {
return getStringFromResourceBundle("user.title");
}
@Override
public String getFxmlFile() {
return "/test/spring/boot/TestSpring.fxml";
}
},
LOGIN {
@Override
public String getTitle() {
return getStringFromResourceBundle("login.title");
}
@Override
public String getFxmlFile() {
return "/test/spring/boot/LoginPage.fxml";
}
};
public abstract String getTitle();
public abstract String getFxmlFile();
String getStringFromResourceBundle(String key){
return ResourceBundle.getBundle("Bundle").getString(key);
}
}
SpringFxmlLoader.java
@Component
public class SpringFXMLLoader {
private final ResourceBundle resourceBundle;
private final ApplicationContext context;
@Autowired
public SpringFXMLLoader(ApplicationContext context, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle;
this.context = context;
}
public Parent load(String fxmlPath) throws IOException {
FXMLLoader loader = new FXMLLoader();
loader.setControllerFactory(context::getBean); //Spring now FXML Controller Factory
loader.setResources(resourceBundle);
loader.setLocation(getClass().getResource(fxmlPath));
System.out.println("springfxmlloader class : "+fxmlPath);
System.out.println("LOADER : ");
return loader.load();
}
}
舞台管理器
public class StageManager {
private static final Logger LOG = getLogger(StageManager.class);
private final Stage primaryStage;
private final SpringFXMLLoader springFXMLLoader;
public StageManager(SpringFXMLLoader springFXMLLoader, Stage stage) {
System.out.println(">>>>>>>>>>>>>>>>>> 1");
this.springFXMLLoader = springFXMLLoader;
this.primaryStage = stage;
}
public void switchScene(final FxmlView view) {
System.out.println(">>>>>>>>>>>>>>>>>> 2");
Parent viewRootNodeHierarchy = loadViewNodeHierarchy(view.getFxmlFile());
show(viewRootNodeHierarchy, view.getTitle());
}
private void show(final Parent rootnode, String title) {
Scene scene = prepareScene(rootnode);
//scene.getStylesheets().add("/styles/Styles.css");
//primaryStage.initStyle(StageStyle.TRANSPARENT);
primaryStage.setTitle(title);
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.centerOnScreen();
System.out.println(">>>>>>>>>>>>>>>>>> 3");
try {
primaryStage.show();
} catch (Exception exception) {
logAndExit ("Unable to show scene for title" + title, exception);
}
}
private Scene prepareScene(Parent rootnode){
System.out.println(">>>>>>>>>>>>>>>>>> 4");
Scene scene = primaryStage.getScene();
System.out.println("SCN >>>>>>>>>>>>>>>>>>>> : "+ scene);
if (scene == null) {
scene = new Scene(rootnode);
}
scene.setRoot(rootnode);
return scene;
}
private Parent loadViewNodeHierarchy(String fxmlFilePath) {
System.out.println(">>>>>>>>>>>>>>>>>> 5 path: "+fxmlFilePath);
Parent rootNode = null;
try {
System.out.println(fxmlFilePath);
rootNode = springFXMLLoader.load(fxmlFilePath);
System.out.println(">>>>5 : try");
Objects.requireNonNull(rootNode, "A Root FXML node must not be null");
} catch (Exception exception) {
System.out.println("File path????? : "+fxmlFilePath);
logAndExit("Unable to load FXML view >> " + fxmlFilePath, exception);
exception.printStackTrace();
}
return rootNode;
}
private void logAndExit(String errorMsg, Exception exception) {
System.out.println(">>>>>>>>>>>>>>>>>> 6");
LOG.error(errorMsg, exception, exception.getCause());
Platform.exit();
}
}
你忘记在你的类上添加一个StereotypeLoginPageController
这就是 Spring 告诉你的原因:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'test.spring.boot.LoginPageController'
由于该类未标记,组件扫描将忽略它,并且不会为该类型分配 bean 寄存器。
尝试:
@Controller
public class LoginPageController implements Initializable{
@Autowired
public LoginPageController(UserService userService, private StageManager stageManager){
this.userService = userService;
this.stageManager = stageManager;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句