Я использую Spring для инъекции зависимостей, поэтому у меня есть класс, который использует swing для пользовательского интерфейса, однако, когда я хочу использовать @Autowired
для любых объектов swing, я получаю NullPointerException.Spring Autowired Swing objects NullPointerException
Вот класс:
@Component
public class PanelImpl implements Panel {
@Autowired
@Qualifier("getJPanel")
private JPanel panel;
//@Autowired
private JButton getInfoBtn = new JButton();
public PanelImpl() {
init();
}
private void init() {
setPanel();
}
private void setPanel() {
getInfoBtn.setText("Get Info");
panel.add(getInfoBtn);
}
@Override
public JPanel getPanel() {
return panel;
}
}
А вот класс конфигурации:
@Configuration
@ComponentScan("ooc")
@PropertySource("app.properties")
public class SpringConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public Panel getPanel() {
Panel PanelImpl = new PanelImpl();
return PanelImpl;
}
@Bean
public JPanel getJPanel(){
return new JPanel();
}
}
Поэтому любые предложения, как я могу использовать весной для инъекций свинг объектов? Спасибо заранее.
Позаботьтесь, чтобы не злоупотреблять '@ Autowired' - это легко приводит к недостижимому беспорядку. См. Например, http://stackoverflow.com/questions/29260676. Даже ссылка Spring ссылается на '@ Autowired': см. Таблицу 5.2 на http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-autowire –
@VictorSorokin, спасибо за ваш комментарий. Итак, что вы предлагаете для того, чтобы не использовать «@ Autowired»? – secret
Используйте явные зависимости - через конструктор или через сеттеры. Это требует больше нажатий клавиш, но у вас гораздо более четкая база кода, и вы тестируете модуль без Spring (так как вы можете передавать зависимости от кода тестового кода к вашим объектам). –