2014-01-17 22 views
0

我正在爲分級系統的Swing GUI工作。出於某種原因,我的刪除Jbutton以及清除模型的方法在調用時開始返回NPE。他們以前工作,並使用調試器,我發現索引是正確的,我找不到他們不工作的原因。來自DefaulListModel的NullPointerException

現在,我可以添加到模型中,但由於某些原因我無法清除或刪除任何元素。

編輯:我只是做了一個測試,它沒有工作,這段代碼似乎不是一個問題。

DefaultListModel<Student> model; //List model in View class 

private void handleDeleteButton(){ //Controller class method to handle delete button 
    int indexToDelete = sv.listSelectedIndex(); 
    if(indexToDelete >= 0){ 
     model.remove(indexToDelete); //remove Student object from DefaultListModel 
    } 

}

public int listSelectedIndex(){ //method in the View class to return the selected list index 
    return studentList.getMinSelectionIndex(); 
} 

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at gradingsystem.SView.setFields(SView.java:136) 
at gradingsystem.SController.valueChanged(SController.java:181) 
at javax.swing.JList.fireSelectionValueChanged(JList.java:1798) 
at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1812) 
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184) 
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:164) 
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:211) 
at javax.swing.DefaultListSelectionModel.removeIndexInterval(DefaultListSelectionModel.java:677) 
at javax.swing.plaf.basic.BasicListUI$Handler.intervalRemoved(BasicListUI.java:2601) 
at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:179) 
at javax.swing.DefaultListModel.remove(DefaultListModel.java:498) 
at gradingsystem.SController.handleDeleteButton(SController.java:63) 
at gradingsystem.SController.actionPerformed(SController.java:96) 
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:713) 
at java.awt.EventQueue.access$000(EventQueue.java:104) 
at java.awt.EventQueue$3.run(EventQueue.java:672) 
at java.awt.EventQueue$3.run(EventQueue.java:670) 
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:686) 
at java.awt.EventQueue$4.run(EventQueue.java:684) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:683) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 
+0

你可以發佈堆棧跟蹤以獲取更多信息 – bvidal

回答

1

你似乎有一個簡單的粗心Java錯誤。你已經聲明瞭你的DefaultListModel變量,但是在你的代碼中沒有初始化它。

總之,你有:

DefaultListModel<Student> model; // model is null 

但需要:

DefaultListModel<Student> model = new DefaultListModel<Student>(); // model not null 

如果這不能解決問題,那麼你的錯誤在其他地方在代碼中沒有顯示,你會要創建併發布Minimal, Complete, Tested and Readable example

+0

我嘗試初始化,我會添加一個示例 – user3133608

+0

@ user3133608:是的,你需要顯示足夠的代碼來重現你的問題,以及一個異常的堆棧跟蹤,但不是太多的代碼來使我們有很多不相關的代碼。請檢查我上面提供的鏈接。 –

+0

感謝您的信息,這是我的第一篇文章。簡單的測試證明,我認爲代碼中的其他地方出了問題。謝謝! – user3133608

0

也許DefaultListModel模型是某種不變的,所以你不能執行刪除操作。檢查一下;)

+0

這將如何導致NPE?答:它不能。 –

相關問題