gpt4 book ai didi

JavaFX SpringBoot SpringJDBC SQLite CRUD 应用程序 - 配置

转载 作者:行者123 更新时间:2023-12-01 18:12:26 25 4
gpt4 key购买 nike

我正在使用 SpringBoot + SpringJDBC + SQLite 开发 JavaFX CRUD 应用程序。我正在使用 Eclipse IDE。

故事:我正在按照逐步流程开发此应用程序。我用 Old School JDBC 连接实现了 JavaFX+SQLite CRUD 应用程序。但是集成 SpringBoot + SpringJDBC 后出现错误。我认为将应用程序配置传递给所有文件时出错。

主类

@SpringBootApplication
public class Main {

public static void main(String[] args) {
Application.launch(MyApplication.class, args);
}

}

AND MyApplication.Class(没有注释)

public class MyApplication extends Application {

protected ConfigurableApplicationContext applicationContext;

@Override
public void init() throws Exception {
applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
}

@Override
public void stop() throws Exception {
applicationContext.close();
Platform.exit();
}

@Override
public void start(Stage stage) throws Exception {
stage.setTitle("ExYouTub");
stage.setOnCloseRequest(x -> {
Platform.exit();
});
stage.setResizable(false);
stage.setScene(new Scene(FXMLLoader.load(getClass().getResource("../Sample.fxml"))));
stage.show();
}

}

和AppConfig.class

@Configuration
@ConditionalOnClass(DataSource.class)
@Profile("sqlite")
@ComponentScan(basePackages= "com.fz")
@PropertySource("classpath:data/config.properties")
public class AppConfig {

@Autowired
Environment environment;

private final String DB_URL = "fz.db.url";

@Bean
DataSource dataSource() {
final DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setUrl(environment.getProperty(DB_URL));
return driverManagerDataSource;
}
}

和 SampleController.class

@Controller
public class SampleController implements Initializable {
//-- un-necessary lines are ignored to copy

@Autowired
@Qualifier("studentsDAOImpl")
private StudentsDAO studentsDAO;

@Override
public void initialize(URL location, ResourceBundle resources) {
tableViewList.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
setColumnProperties();
loadStudentsDetails();
}

private void loadStudentsDetails() {
studentsList.clear();
studentsList.addAll(studentsDAO.getAllStudents()); // this is line 83
tableViewList.setItems(studentsList);
}
}

和错误报告

Caused by: java.lang.NullPointerException
at com.fz.SampleController.loadStudentsDetails(SampleController.java:83)
at com.fz.SampleController.initialize(SampleController.java:78)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2573)
... 17 more

到目前为止,我对此错误的猜测是,配置无法正常工作 - 我认为是这样。我需要建议并帮助我改进这一点。

最佳答案

FXMLLoader 创建 Controller 实例的默认行为是简单地实例化它,这意味着不会注入(inject)任何依赖项。要获得注入(inject),您需要 Spring ApplicationContext 来管理实例创建。

Josh Long 发布了 Spring Tips 分期付款演示如何逐步执行此操作:https://spring.io/blog/2019/01/16/spring-tips-javafx

但是,这是一个相当手动且重复的过程。这就是https://github.com/rgielen/javafx-weaver试图解决。您可以在此处找到文档和示例代码:https://github.com/rgielen/javafx-weaver/tree/master/samples/springboot-sample

免责声明:我创建了这个库,所以我有偏见:)

关于JavaFX SpringBoot SpringJDBC SQLite CRUD 应用程序 - 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60442052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com