2011-05-19 61 views
4

我在programming.I一个新手在我的挥杆application.I问题想什么毛病session.I使用Hibernate和Spring.When来配置它,我按按钮,我想添加信息到数据库,但我得到NullPoinerException.Maybe我必须以另一种方式编码用户界面? 需要你的帮助!谢谢。Hibernate和在Swing应用程序春天

这里我的代码:

MainFrame.java

public class MainFrame extends JFrame { 

    public MainFrame(){ 
     setTitle("Title"); 
     setSize(300,300); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     makeButtons(); 
     setVisible(true); 
    } 
    public void makeButtons(){ 
     JPanel panel=new JPanel(); 
     panel.add(makeLoginField()); 
     panel.add(makeLoginButton()); 
     panel.add(makePassField()); 
     panel.setVisible(true); 
     this.add(panel); 
    } 
    public JButton makeLoginButton(){ 
     JButton loginButton=new JButton("Login"); 
     loginButton.addActionListener(new Action()); 
     return loginButton; 
    } 
    public JTextField makeLoginField(){ 
     JTextField loginField=new JTextField(); 
     loginField.setSize(new Dimension(134, 20)); 
     return loginField; 
    } 
    public JPasswordField makePassField(){ 
     JPasswordField passField=new JPasswordField(); 
     passField.setSize(new Dimension(134, 20)); 
     return passField; 
    } 
    public static void main(String[] args) { 
     JFrame m=new MainFrame(); 
    } 
} 

Action.java

class Action implements ActionListener{ 
    @Autowired 
    private UserServiceInterface userService; 

    public void setuserService(UserServiceInterface userService) { 
     this.userService=userService; 
    } 
    public void actionPerformed (ActionEvent e){ 
     User u=new User(); 
     u.setName("HellofromGUI");  
     userService.addUser(u); 
    } 
} 

UserService.java

@Transactional 
public class UserService implements UserServiceInterface{ 
    @Autowired 
    private UserDaoInterface dao; 

    public void setDao(UserDaoInterface dao) { 
     this.dao = dao; 
    } 
    public void addUser(User u){ 
    dao.insertRow(u); 
    } 
    public List getData(){ 
     return dao.getDBValues(); 
    } 
} 

UserDao.java

public class UserDao implements UserDaoInterface{ 
    @Autowired 
    private SessionFactory sessionFactory; 

    public void insertRow(User user) { 
     Session session = null; 
     session = sessionFactory.getCurrentSession(); 
     session.save(user); 

    } 
    public void setSessionFactory(SessionFactory sessionFactory) { 
     this.sessionFactory = sessionFactory; 
    } 
    public List getDBValues() { 
      Session session = sessionFactory.getCurrentSession(); 
      List<User> users = session.createCriteria(User.class).list(); 
      return users; 
    } 
} 

的beans.xml

<beans> 

    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" /> 

    <bean id="userdao" class="dao.UserDao"> 
     <property name="sessionFactory"> 
      <ref bean="sessionFactory" /> 
     </property> 
    </bean> 
    <bean id="userservice" class="service.UserService"> 
     <property name="dao"> 
      <ref bean="userdao" /> 
     </property> 
    </bean> 
    <bean id="paymentdao" class="dao.PaymentDao"> 
     <property name="sessionFactory"> 
      <ref bean="sessionFactory" /> 
     </property> 
    </bean> 
    <bean id="paymentservice" class="service.PaymentService"> 
     <property name="dao"> 
      <ref bean="paymentdao" /> 
     </property> 
    </bean> 
    <bean id="usergui" class="ui.Action"> 
     <property name="userService"> 
      <ref bean="userservice" /> 
     </property> 
    </bean> 
</beans> 
+0

可你也发表您的挥杆方面的文件? – 2011-05-19 11:45:52

+0

@El刮破的beans.xml在bean ID“userDAO的” – andre 2011-05-19 12:04:25

+0

我看到裁判名为“SessionFactory的”豆,你在哪里声明豆?你能够调试这个代码吗?如果是这样,那么NullPointerException究竟是什么?它是sessionFactory对象吗? sessionFactory返回的是会话吗? – 2011-05-19 12:40:55

回答

4

与春季记住的重要一点是,进入春季管理的bean只能注入引用。在你的代码中,你期待Spring会为你的Action类注入一个UserService的实例。春季应正确执行此注入到名为usergui春豆,但是,在你UI您正在创建自己的Action类用下面的代码实例:

loginButton.addActionListener(new Action()); 

任何时候当你创建一个对象自己的实例,它不会被Spring管理,需要像对待任何自我管理的对象一样对待,即手动设置所有必需的引用。

为了获得预期的结果,您需要更改UI逻辑以引用您在配置文件中定义的Spring usergui bean。为了获得这种情况下,你首先需要获取Spring的BeanFactory'. Here is an example of how your code can look to retrieve the correct instance of usergui`的一个实例:

// using ClassPathResource, you can also use a FileResource or other method to load config 
Resource res = new ClassPathResource("/beans.xml"); 
// initialize bean factory 
BeanFactory factory = new XmlBeanFactory(res);   

// retrieve Spring managed Action class 
ActionListener action = factory.getBean("usergui", ActionListener.class); 

// configure login button 
loginButton.addActionListener(action); 

的示例代码中直接引用的ActionListener而不是Action类。通常使用Spring的时候,你想用的一类,而不是类本身(Action)实现的接口(ActionListener)进行交互。通过这样做,您可以更改bean usergui所引用的实现,例如Action - > DifferentAction,而无需修改您的UI代码。

+0

时,NPE很可能被'Action'抛出了!非常感谢!你真的帮了我! – andre 2011-05-19 16:40:29

+0

@Kris的Babis嗨,我面临着同样的问题,你可以请帮助我,我问在这个网站的一个问题:“如何使用Spring IOC与Swing”如果可能的话,请帮助我。 – Balasaheb 2012-06-05 12:19:16

相关问题