【发布时间】:2015-03-19 15:15:02
【问题描述】:
我目前正在使用 JDBC 和 Swing 创建 GUI 并从本地数据库中获取值。我正在从数据库中获取数据并希望将其放入 JComboBox 但从一类到另一类。我已经检查过,数据来自数据库正确,所以这不是问题。当我运行程序时,我得到 NullPointerException,我不知道为什么。这是模型类中产生问题的代码:
this.ba = IO.getBetalningsansvarig();
DB-通信类:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
public class dbIO {
//Code for fetching data from the database and putting it into an ArrayList.
public ArrayList<String> getBetalningsansvarig() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
ArrayList<String> asd = new ArrayList<String>();
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
String connectionUrl = "jdbc:sqlserver://localhost;" + "database=INL5";
Connection conn = DriverManager.getConnection(connectionUrl, "testadmin", "test");
System.out.println("ANSLUTNINGEN LYCKADES");
Statement stmt = conn.createStatement();
String namn;
ResultSet rs = stmt.executeQuery(
"SELECT Namn "
+ "FROM Betalningsansvarig ");
while (rs.next()) {
namn = rs.getString("Namn");
asd.add(namn);
}
for (String s : asd) {
System.out.println(s);
}
stmt.close();
conn.close();
return (asd);
}
}
模型类:
import java.sql.SQLException;
import java.util.ArrayList;
public class Model {
private dbIO IO = new dbIO();
private ArrayList<String> ba = new ArrayList<String>();
public void setBa(ArrayList<String> ba) {
this.ba = ba;
}
public ArrayList<String> getBa() {
return ba;
}
public Model() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
this.ba = IO.getBetalningsansvarig();
}
}
主类:
import java.sql.SQLException;
public class Main {
public static void main(String[] args) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
dbIO d = new dbIO();
//d.start();
Model m = new Model();
View1 v = new View1();
v.setModel(m);
v.open();
}
}
查看类:
import java.sql.SQLException;
import java.util.ArrayList;
public class View1 extends javax.swing.JFrame {
private Model m;
private ArrayList<String> betalningsansvariga = new ArrayList<String>();
private jComboBox1;
public View1() {
initComponents();
betalningsansvariga = m.getBa();
for(String s : betalningsansvariga) {
JComboBox1.addItem(s);
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
list1 = new java.awt.List();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(35, 35, 35)
.addComponent(list1, javax.swing.GroupLayout.PREFERRED_SIZE, 219, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(526, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(44, 44, 44)
.addComponent(list1, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(272, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
public void setModel(Model m) { this.m = m; }
public void open() {
setVisible(true);
}
}
错误信息:
Exception in thread "main" java.lang.NullPointerException
at Model.<init>(Model.java:17)
at Main.main(Main.java:9)
Java Result: 1
【问题讨论】:
-
提供 Nullpointer 的堆栈跟踪可能是个好主意,并可能通过注释在代码中标记该堆栈跟踪中引用的行所在的位置。
-
可能有很多问题,问题来自 getBetalningsansvarig(),但如果没有堆栈跟踪,我们无法确切知道在哪里。请提供完整的错误信息。