Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX SpringBoot SpringJDBC SQLite CRUD应用程序-配置_Java_Sqlite_Spring Boot_Javafx_Spring Jdbc - Fatal编程技术网

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

JavaFX SpringBoot SpringJDBC SQLite CRUD应用程序-配置,java,sqlite,spring-boot,javafx,spring-jdbc,Java,Sqlite,Spring Boot,Javafx,Spring Jdbc,我正在用SpringBoot+SpringJDBC+SQLite开发一个JavaFXCRUD应用程序。我正在使用EclipseIDE 故事: 我正在逐步开发这个应用程序。我用老式的JDBC连接实现了JavaFX+SQLite CRUD应用程序。但是在集成SpringBoot+SpringJDBC之后,我得到了一个错误。我认为将应用程序配置传递到所有文件时会出现错误 主课 @SpringBootApplication public class Main { public static v

我正在用SpringBoot+SpringJDBC+SQLite开发一个JavaFXCRUD应用程序。我正在使用EclipseIDE

故事: 我正在逐步开发这个应用程序。我用老式的JDBC连接实现了JavaFX+SQLite CRUD应用程序。但是在集成SpringBoot+SpringJDBC之后,我得到了一个错误。我认为将应用程序配置传递到所有文件时会出现错误

主课

@SpringBootApplication
public class Main {

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

}
和MyApplication.Class(没有注释)

和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创建控制器实例的默认行为是简单地实例化它,这意味着没有注入依赖项。为了获得注入,您需要使用Spring ApplicationContext来管理实例创建

Josh Long发布了一个Spring Tips分期付款,演示了如何一步一步地做到这一点:

然而,这是一个相当手工和重复的过程。这就是试图解决的问题。您可以在此处找到文档和示例代码:


免责声明:我创建了库,因此我有偏见:)

我认为您需要将SampleController作为一个组件,并使用FxWeaver加载FXML视图。它使用应用程序上下文并在spring容器中注册控制器。您需要以某种方式确保从spring检索控制器,而不是默认机制(在其中,
fxmloader
直接实例化它)。我从未使用过FXWeaver,这是一种解决方案;另一种方法是将控制器工厂设置为Spring应用程序上下文。请参阅(以及其他许多方法)
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