2013-03-17 36 views
0

所有人, 我是新來的spring,java編程。我創建了一個java應用程序,該應用程序應該可以通過點擊操作訪問數據庫,但我不知道爲什麼我會收到空​​指針異常,因爲所有對象都被正確設置。使用Swing GUI的Spring Java項目中的Nullpointer異常

Swing代碼:

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package com.ibm.quest.taxonomyupdate.ui; 

import com.ibm.quest.taxonomyupdate.model.TypeCategory; 
import com.ibm.quest.taxonomyupdate.model.TypeCategoryJDBCTemplate; 
import javax.swing.ButtonGroup; 

/** 
* 
* @author Ashish Tyagi 
*/ 
public class ApplicationWindow extends javax.swing.JFrame { 
    TypeCategoryJDBCTemplate typeCategoryJDBCtemplate; 

    /** 
    * Creates new form ApplicationWindow 
    */ 

    public void setTypeCategoryJDBCtemplate(TypeCategoryJDBCTemplate typeCategoryJDBCtemplate) { 
     this.typeCategoryJDBCtemplate = typeCategoryJDBCtemplate; 
     System.err.println("setter in the application window "+this.typeCategoryJDBCtemplate); 
    } 


    public ApplicationWindow() { 
     initComponents(); 
     addRadioButtonInGroup(); 
     setTitle("Taxonomy Updator"); 
    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 
     java.awt.GridBagConstraints gridBagConstraints; 

     buttonGroup = new javax.swing.ButtonGroup(); 
     infoLabel = new javax.swing.JLabel(); 
     jTextField1 = new javax.swing.JTextField(); 
     searchButton = new javax.swing.JButton(); 
     beginButton = new javax.swing.JRadioButton(); 
     endButton = new javax.swing.JRadioButton(); 
     exactButton = new javax.swing.JRadioButton(); 
     anywhereButton = new javax.swing.JRadioButton(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     jTable1 = new javax.swing.JTable(); 
     closeButton = new javax.swing.JButton(); 
     updateAllButton = new javax.swing.JButton(); 
     updateButton = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     getContentPane().setLayout(new java.awt.GridBagLayout()); 

     infoLabel.setText("Please enter the text you wants to search"); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 0; 
     gridBagConstraints.gridwidth = 3; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
     gridBagConstraints.insets = new java.awt.Insets(11, 10, 0, 0); 
     getContentPane().add(infoLabel, gridBagConstraints); 

     jTextField1.setText("jTextField1"); 
     jTextField1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jTextField1ActionPerformed(evt); 
      } 
     }); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 1; 
     gridBagConstraints.gridwidth = 10; 
     gridBagConstraints.ipadx = 279; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
     gridBagConstraints.insets = new java.awt.Insets(6, 10, 0, 0); 
     getContentPane().add(jTextField1, gridBagConstraints); 

     searchButton.setText("Search"); 
     searchButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       searchButtonActionPerformed(evt); 
      } 
     }); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 19; 
     gridBagConstraints.gridy = 1; 
     gridBagConstraints.gridwidth = 25; 
     gridBagConstraints.ipadx = 17; 
     gridBagConstraints.ipady = -3; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
     gridBagConstraints.insets = new java.awt.Insets(6, 6, 0, 10); 
     getContentPane().add(searchButton, gridBagConstraints); 

     beginButton.setText("Begin with"); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 2; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
     gridBagConstraints.insets = new java.awt.Insets(2, 10, 0, 0); 
     getContentPane().add(beginButton, gridBagConstraints); 

     endButton.setText("End with"); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 1; 
     gridBagConstraints.gridy = 2; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
     gridBagConstraints.insets = new java.awt.Insets(2, 0, 0, 0); 
     getContentPane().add(endButton, gridBagConstraints); 

     exactButton.setText("Exact Match"); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 2; 
     gridBagConstraints.gridy = 2; 
     gridBagConstraints.gridwidth = 5; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
     gridBagConstraints.insets = new java.awt.Insets(2, 0, 0, 0); 
     getContentPane().add(exactButton, gridBagConstraints); 

     anywhereButton.setText("Anywhere"); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 9; 
     gridBagConstraints.gridy = 2; 
     gridBagConstraints.gridwidth = 11; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
     gridBagConstraints.insets = new java.awt.Insets(2, 0, 0, 0); 
     getContentPane().add(anywhereButton, gridBagConstraints); 

     jTable1.setModel(new javax.swing.table.DefaultTableModel(
      new Object [][] { 
       {null, null, null, null}, 
       {null, null, null, null}, 
       {null, null, null, null}, 
       {null, null, null, null} 
      }, 
      new String [] { 
       "Title 1", "Title 2", "Title 3", "Title 4" 
      } 
     )); 
     jScrollPane1.setViewportView(jTable1); 

     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 3; 
     gridBagConstraints.gridwidth = 44; 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.ipadx = 351; 
     gridBagConstraints.ipady = 60; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
     gridBagConstraints.weightx = 1.0; 
     gridBagConstraints.weighty = 1.0; 
     gridBagConstraints.insets = new java.awt.Insets(2, 10, 0, 10); 
     getContentPane().add(jScrollPane1, gridBagConstraints); 

     closeButton.setText("Close"); 
     closeButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       closeButtonActionPerformed(evt); 
      } 
     }); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 43; 
     gridBagConstraints.gridy = 4; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
     gridBagConstraints.insets = new java.awt.Insets(175, 6, 0, 10); 
     getContentPane().add(closeButton, gridBagConstraints); 

     updateAllButton.setText("Update All"); 
     updateAllButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       updateAllButtonActionPerformed(evt); 
      } 
     }); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 6; 
     gridBagConstraints.gridy = 4; 
     gridBagConstraints.gridwidth = 24; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
     gridBagConstraints.insets = new java.awt.Insets(175, 6, 0, 0); 
     getContentPane().add(updateAllButton, gridBagConstraints); 

     updateButton.setText("Update"); 
     updateButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       updateButtonActionPerformed(evt); 
      } 
     }); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 2; 
     gridBagConstraints.gridy = 4; 
     gridBagConstraints.gridwidth = 4; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
     gridBagConstraints.insets = new java.awt.Insets(175, 8, 0, 0); 
     getContentPane().add(updateButton, gridBagConstraints); 

     pack(); 
    }// </editor-fold>       

private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {            
    String text = jTextField1.getText(); 
    java.util.List<TypeCategory> records = this.typeCategoryJDBCtemplate.listTypeCategory(text); 
    for(TypeCategory value:records) 
    System.out.println(value.getDescription()+" "+value.getTaxonomydescription()); 
}            


    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {            
     // TODO add your handling code here: 
    }           

    private void updateButtonActionPerformed(java.awt.event.ActionEvent evt) {            
     // TODO add your handling code here: 
    }            

    private void updateAllButtonActionPerformed(java.awt.event.ActionEvent evt) {             
     // TODO add your handling code here: 
    }            

    private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {            
     // TODO add your handling code here: 
     this.dispose(); 
    }           

    /** 
    * @param args the command line arguments 
    */ 
    public void start() { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(ApplicationWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(ApplicationWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(ApplicationWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(ApplicationWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new ApplicationWindow().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify      
    private javax.swing.JRadioButton anywhereButton; 
    private javax.swing.JRadioButton beginButton; 
    private javax.swing.ButtonGroup buttonGroup; 
    private javax.swing.JButton closeButton; 
    private javax.swing.JRadioButton endButton; 
    private javax.swing.JRadioButton exactButton; 
    private javax.swing.JLabel infoLabel; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JTable jTable1; 
    private javax.swing.JTextField jTextField1; 
    private javax.swing.JButton searchButton; 
    private javax.swing.JButton updateAllButton; 
    private javax.swing.JButton updateButton; 
    // End of variables declaration     

    private void addRadioButtonInGroup() { 
     buttonGroup = new ButtonGroup(); 
     buttonGroup.add(beginButton); 
     buttonGroup.add(endButton); 
     buttonGroup.add(exactButton); 
     buttonGroup.add(anywhereButton); 
    } 
} 

主文件:

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package com.ibm.quest.taxonomyupdate; 
import com.ibm.quest.taxonomyupdate.model.TypeCategoryJDBCTemplate; 
import org.springframework.context.ApplicationContext; 
import com.ibm.quest.taxonomyupdate.ui.ApplicationWindow; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

/** 
* 
* @author Ashish Tyagi 
*/ 
public class TaxonomyUpdater { 
    public static void main(String [] args){ 
     ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Config.xml"); 
     ApplicationWindow window= (ApplicationWindow) context.getBean("applicationWindow"); 
     window.start(); 
//  TypeCategoryJDBCTemplate typecategoryJDBCTemplate = (TypeCategoryJDBCTemplate)context.getBean("typeCategoryJDBCTemplate"); 
//  window.setTypeCategoryJDBCtemplate(typecategoryJDBCTemplate); 
//  List<TypeCategory> records=typecategoryJDBCTemplate.listTypeCategory("Q2%"); 
//  for(TypeCategory value:records) 
//   System.out.println(value.getTypecatind()+" "+value.getDescription()+" "+value.getTaxonomydescription()); 
    } 

} 

春-config.xml中創建該驗證對象

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:c="http://www.springframework.org/schema/c" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:flow="http://www.springframework.org/schema/webflow-config" 
     xmlns:jee="http://www.springframework.org/schema/jee" 
     xmlns:jms="http://www.springframework.org/schema/jms" 
     xmlns:lang="http://www.springframework.org/schema/lang" 
     xmlns:osgi="http://www.springframework.org/schema/osgi" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:util="http://www.springframework.org/schema/util" 

     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 
      http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd 
      http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd 
      http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.2.xsd 
      http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.2.xsd 
      http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd 
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
      http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd 
"> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver" /> 
     <property name="url" value="jdbc:db2://sample.sample.com:3798/sampledb"/> 
     <property name="username" value="root" /> 
     <property name="password" value="root" /> 
    </bean> 
    <bean id="typeCategoryJDBCTemplate" class="com.ibm.quest.taxonomyupdate.model.TypeCategoryJDBCTemplate"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 
    <bean id="applicationWindow" class="com.ibm.quest.taxonomyupdate.ui.ApplicationWindow"> 
     <property name="typeCategoryJDBCtemplate" ref="typeCategoryJDBCTemplate" /> 
    </bean> 


</beans> 

日誌信息,但仍然空指針異常。

Mar 17, 2013 12:24:51 AM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName 
INFO: Loaded JDBC driver: com.ibm.db2.jcc.DB2Driver 
Inside the setDataS[email protected]4389b7 
setter in the application window [email protected]fd4 
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at com.ibm.quest.taxonomyupdate.ui.ApplicationWindow.searchButtonActionPerformed(ApplicationWindow.java:207) 
    at com.ibm.quest.taxonomyupdate.ui.ApplicationWindow.access$100(ApplicationWindow.java:15) 
    at com.ibm.quest.taxonomyupdate.ui.ApplicationWindow$2.actionPerformed(ApplicationWindow.java:88) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6505) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
    at java.awt.Component.processEvent(Component.java:6270) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4861) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2719) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) 
    at java.awt.EventQueue.access$200(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:688) 
    at java.awt.EventQueue$3.run(EventQueue.java:686) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:702) 
    at java.awt.EventQueue$4.run(EventQueue.java:700) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:699) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 
+0

哪兒你得到空指針異常?堆棧跟蹤? – bchurchill 2013-03-17 04:20:47

+0

我不打算挖掘所有這些東西,試圖找出NPE的位置。把堆棧跟蹤放在問題中。 – 2013-03-17 04:20:52

+0

@bchurchill我已經更新NPE堆棧跟蹤的問題,感謝您的期待 – Ashish 2013-03-17 04:28:26

回答

0

感謝所有爲尋找到它,但我發現在我的代碼是ApplicatoinWindow創建窗口的問題 - > start()方法。它正在創建對象並返回控件。

/* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new ApplicationWindow().setVisible(true); 
     } 
    }); 

我改成了

 /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      setVisible(true); 
     } 
    });