Java 如何将Spring与Swing结合使用
我正在使用Swing开发一个桌面应用程序,但是有了它,我想使用Spring框架来使用IOC,并且我想使用接口技术来实现这一点。但是,当我通过接口的实例调用一个函数,并且该接口由一个声明了被调用函数的类实现时,我得到了nullPointerException 以下是我的简单应用程序代码: 接口:Java 如何将Spring与Swing结合使用,java,spring,swing,spring-mvc,Java,Spring,Swing,Spring Mvc,我正在使用Swing开发一个桌面应用程序,但是有了它,我想使用Spring框架来使用IOC,并且我想使用接口技术来实现这一点。但是,当我通过接口的实例调用一个函数,并且该接口由一个声明了被调用函数的类实现时,我得到了nullPointerException 以下是我的简单应用程序代码: 接口: 您的代码中缺少某些内容 您发布的主函数不会调用任何Swing框架的创建。这真的是你要调用的代码吗 其次,bean名称不匹配,在xml中bean名为empMasterServiceImpl,在代码中取emp
您的代码中缺少某些内容 您发布的主函数不会调用任何Swing框架的创建。这真的是你要调用的代码吗
其次,bean名称不匹配,在xml中bean名为
empMasterServiceImpl
,在代码中取empMasterService
。它将不起作用。如何创建EmpManager,在应用程序xml中有一个bean用于管理器,但它也包含主方法。然后在主方法中获取应用程序上下文,并设置服务bean,这样EmpManager bean就不会在应用程序上下文中做任何事情
我建议将main方法提取到另一个类中,在该类中加载应用程序上下文,并仅在UI管理器上使用getBean。当前的设置方式忽略了Spring的许多IoC功能,直接从应用程序上下文中获取bean,而不是让Spring为您这样做
这可能无法直接解决您的问题,但它至少允许Spring有一个单一的入口点,并将DI保持在Spring的手中,而不是依赖您自己设置它们。只是一个想法-因为您的上下文似乎初始化正确,您确定没有两个不同的
ApplicationContext.xml
文件挂在不同的目录中吗?“非常紧急”您的时间安排与我们无关。也许你需要一位顾问。@AndrewThompson谢谢你的大力支持…@maksimov谢谢你的回复,我查看了我的应用程序目录,但只有一个ApplicationContext文件。@Balasaheb Spring通常会打印错误/警告,如果初始化有任何问题,请在调试这一行时小心:new ClassPathXmlApplicationContext(新字符串[]{“ApplicationContext.xml”})代码>感谢回复,实际上empMasterService是IEmpMasterService接口的一个实例,由empMasterService实现。我创建了一个接口bean,并将其映射到实现的类。我在我的网络项目中使用了这种技术,效果很好。我想这是另一个我没有添加的问题。谢谢,现在我知道这段代码出了什么问题,实际上我正在创建一个按钮并向其中添加一个actionListener,所以这次我创建了一个新的actionListener,这就是为什么它会出现错误。现在我已经创建了实现ActionListener的classMyActionListener,在这个类中我使用了这个bean。
public interface IEmpMasterService {
public InternalResultsResponse<EmpMaster> maintainEmpMaster(
EmpMaster empMaster);
}
public class EmpMasterService implements IEmpMasterService {
private IEmpMasterDAO empMasterDAO;
public IEmpMasterDAO getEmpMasterDAO() {
return empMasterDAO;
}
public void setEmpMasterDAO(IEmpMasterDAO empMasterDAO) {
this.empMasterDAO = empMasterDAO;
}
@Override
public InternalResultsResponse<EmpMaster> maintainEmpMaster(
EmpMaster empMaster) {
InternalResultsResponse<EmpMaster> response = new InternalResultsResponse<EmpMaster>();
//some logic her...
response = getEmpMasterDAO().maintainEmpMaster(request);
return response;
}}
public interface IEmpMasterDAO {
InternalResultsResponse<EmpMaster> maintainEmpMaster(
EmpMasterRequest request);
}
class Implementing DAO:
public class EmpMasterDAO extends HibernateDaoSupport implements IEmpMasterDAO{
@Override
public InternalResultsResponse<EmpMaster> maintainEmpMaster(
EmpMasterRequest empMasterRequest) {
//hibernate code goes here...
return resultsResponse;
}
}
public class EmpManager extends javax.swing.JFrame {
private IEmpMasterService empMasterService;
private static ApplicationContext context;
public IEmpMasterService getEmpMasterService() {
return empMasterService;
}
public void setEmpMasterService(IEmpMasterService empMasterService) {
this.empMasterService = empMasterService;
}
public static void main(String args[]) {
context = new ClassPathXmlApplicationContext(new String[]{"ApplicationContext.xml"});
empMasterService = (EmpMasterService)context.getBean("empMasterService");
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String name = jTextField1.getText();
String salary = jTextField2.getText();
EmpMaster empMaster = new EmpMaster();
empMaster.setEmpName(name);
empMaster.setSalary(Double.parseDouble(salary));
//***** getting Error at this line *****//
InternalResultsResponse<EmpMaster> response = getEmpMasterService().maintainEmpMaster(empMaster);
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<import resource="dataSource.xml"/>
<bean id="mainFrame" class="org.UI.EmpManager">
<property name="title"> <value>Spring Example</value></property>
<property name="empMasterService" ref="empMasterServiceImpl"></property>
</bean>
<bean id="empMasterServiceImpl" class="org.service.EmpMasterService">
<property name="empMasterDAO" ref="empMasterDAOTarget"></property>
</bean>
<bean id="empMasterDAOTarget" class="org.DAO.EmpMasterDAO">
<property name="hibernateTemplate" ref="matrixHibernateTemplate"/>
</bean>
</beans>
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.UI.EmpManager.jButton1ActionPerformed(EmpManager.java:140)
at org.UI.EmpManager.access$0(EmpManager.java:132)
at org.UI.EmpManager$1.actionPerformed(EmpManager.java:67)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)