2013-05-02 83 views
1

我正在編寫代碼以從MySQL數據庫檢索數據。
我想將查詢的一列添加到JList。異常將元素添加到JList

這是我的代碼:

try { 
     ArrayList<String> names = new ArrayList(); 
     db = new Database(); 
     db.connect(); 
     Statement st = db.getConnection().createStatement(); 
     ResultSet rs = st.executeQuery("SELECT nombre FROM alumnos"); 

     while (rs.next()) { 
      names.add(rs.getString("nombre")); 
     } 

     DefaultListModel listModel = new DefaultListModel(); 
     for(String nms : names) { 
      listModel.addElement(nms); 
     } 

     //This is the line 140 
     // and lstInicio is the JList 
     lstInicio.setModel(listModel); 

    } catch (SQLException sql) { 
     System.err.println(sql.getMessage()); 
    } 

我覺得一切都很好,但是當我到達這部分代碼我得到一個異常:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at proyecto.ausentismo.MainWindow.loadList(MainWindow.java:140) 
at proyecto.ausentismo.MainWindow.<init>(MainWindow.java:21) 
at proyecto.ausentismo.Login.btnLoginActionPerformed(Login.java:121) 
at proyecto.ausentismo.Login.access$000(Login.java:11) 
at proyecto.ausentismo.Login$1.actionPerformed(Login.java:49) 
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$Actions.actionPerformed(BasicButtonListener.java:303) 
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1664) 
at javax.swing.JComponent.processKeyBinding(JComponent.java:2879) 
at javax.swing.JComponent.processKeyBindings(JComponent.java:2926) 
at javax.swing.JComponent.processKeyEvent(JComponent.java:2842) 
at java.awt.Component.processEvent(Component.java:6282) 
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.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895) 
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:762) 
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1027) 
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:899) 
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727) 
at java.awt.Component.dispatchEventImpl(Component.java:4731) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
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) 

有誰知道是什麼原因造成這例外?我怎麼知道? 編輯:我評論了錯誤的行。並stil得到異常

+1

你可以給你的代碼塊添加一個註釋,指出哪一行是MainWindow行140(錯誤跟蹤說的是異常的來源)? – Bobulous 2013-05-02 22:32:22

+2

我第二@Arkanon請求。如果錯誤出現在上面的代碼中,我的賭注就在這一行:'lstInicio.setModel(listModel);'和'lstInicio'爲null。如果是這樣,那麼在使用它之前你沒有正確初始化這個變量。 – 2013-05-02 22:41:09

+0

他必須缺少在他的代碼中創建對象'DefaultListModel listModel = new DefaultListModel();' – 2013-05-02 23:22:51

回答

2

正如我懷疑,您的lstInicio變量爲空。解決方案:回顧你的代碼,找出你認爲你初始化它的地方,看看它爲什麼沒有被初始化。這就是我們可以基於迄今爲止發佈的內容說的所有內容。


編輯:@ jesuscc29:高興你得到它的工作。這裏的關鍵教訓並不是解決具體問題的答案,而是調試NullPointerException(NPE)的一般過程,因爲我可以保證你一次又一次地運行這些bug。總是先找出哪一行,然後該行上的哪個變量導致NPE發生,然後嘗試追溯到代碼中,以查看變量爲什麼爲空。做到這一點,90%的時間你會發現問題和解決方案。

+0

OMG!..我知道我的錯誤在哪裏,我是在類構造函數上調用我的方法,但我在調用'initComponents();'之前調用,當然'lstInicio'爲null。但無論如何,謝謝大家的答案! – jesuscc29 2013-05-03 18:31:45

+0

@ jesuscc29:很高興你有它的工作。這裏的關鍵教訓並不是解決具體問題的答案,而是調試NullPointerException(NPE)的一般過程,因爲我可以保證你一次又一次地運行這些bug。總是先找出哪一行,然後該行上的哪個變量導致NPE發生,然後嘗試追溯到代碼中,以查看變量爲什麼爲空。做到這一點,90%的時間你會發現問題和解決方案。祝你好運! – 2013-05-03 18:47:48