异常将元素添加到JList
我正在编写代码以从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得到异常
正如我怀疑,您的lstInicio
变量为空。解决方案:回顾你的代码,找出你认为你初始化它的地方,看看它为什么没有被初始化。这就是我们可以基于迄今为止发布的内容说的所有内容。
编辑:@ jesuscc29:高兴你得到它的工作。这里的关键教训并不是解决具体问题的答案,而是调试NullPointerException(NPE)的一般过程,因为我可以保证你一次又一次地运行这些bug。总是先找出哪一行,然后该行上的哪个变量导致NPE发生,然后尝试追溯到代码中,以查看变量为什么为空。做到这一点,90%的时间你会发现问题和解决方案。
OMG!..我知道我的错误在哪里,我是在类构造函数上调用我的方法,但我在调用'initComponents();'之前调用,当然'lstInicio'为null。但无论如何,谢谢大家的答案! – jesuscc29 2013-05-03 18:31:45
@ jesuscc29:很高兴你有它的工作。这里的关键教训并不是解决具体问题的答案,而是调试NullPointerException(NPE)的一般过程,因为我可以保证你一次又一次地运行这些bug。总是先找出哪一行,然后该行上的哪个变量导致NPE发生,然后尝试追溯到代码中,以查看变量为什么为空。做到这一点,90%的时间你会发现问题和解决方案。祝你好运! – 2013-05-03 18:47:48
你可以给你的代码块添加一个注释,指出哪一行是MainWindow行140(错误跟踪说的是异常的来源)? – Bobulous 2013-05-02 22:32:22
我第二@Arkanon请求。如果错误出现在上面的代码中,我的赌注就在这一行:'lstInicio.setModel(listModel);'和'lstInicio'为null。如果是这样,那么在使用它之前你没有正确初始化这个变量。 – 2013-05-02 22:41:09
他必须缺少在他的代码中创建对象'DefaultListModel listModel = new DefaultListModel();' – 2013-05-02 23:22:51