首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWT 0 NullPointerException

AWT 0 NullPointerException
EN

Stack Overflow用户
提问于 2014-04-09 11:07:05
回答 2查看 400关注 0票数 0

我对Java非常陌生,我正在尝试用数据库中的数据填充我的JList。数据通过数据库类中的visKunder()方法从数据库中检索。

代码语言:javascript
复制
public ArrayList<Kunde> visKunder(){
    String s1 = "select kundenavn, adresse, telefon from kunde";
    Statement setning = null;
    String kundenavn = null;
    String adresse = null;
    int telefon = 0;
    ResultSet res = null;
    ArrayList<Kunde> kunder = new ArrayList<>();
    try{
        forbindelse.setAutoCommit(false);
        setning = forbindelse.createStatement();
        res = setning.executeQuery(s1);
        while(res.next()){
            kundenavn = res.getString("kundenavn");
            adresse = res.getString("adresse");
            telefon = res.getInt("telefon");
            Kunde kunde = new Kunde(kundenavn, telefon, adresse);
            kunder.add(kunde);
        }
        forbindelse.commit();
    }catch(SQLException error){
        Opprydder.rullTilbake(forbindelse);
        Opprydder.skrivMelding(error, "visKunder()");
    }finally{
        Opprydder.lukkSetning(setning);
        Opprydder.lukkResSet(res);
        try {
            forbindelse.setAutoCommit(true);
        } catch (SQLException ex) {
            Opprydder.skrivMelding(ex, "setAutoCommit()");
        }
    }
    return kunder;

}

当我在GUI类RegVedKj p.printStackTrace()中调用visKunder()作为NullPointerException的问题时,就会出现这个问题。

代码语言:javascript
复制
public class RegVedKjøp extends javax.swing.JFrame {
private static Database d1;

public RegVedKjøp(Database d1) {
    initComponents();
    this.d1 = d1;
}
private void initComponents(){
    ...
    JList jList2 = new JList();
    fyllListe(jList2);
    ...
}
private void fyllListe(JList list){
   ArrayList<Kunde> kunder = d1.visKunder(); 
   list = new JList(kunder.toArray());
}

我不知道这是否相关,但我使用NetBeans的GUI生成器来设计GUI。任何关于如何解决这个问题的建议都将不胜感激。

编辑:

代码语言:javascript
复制
    private void initComponents() {

    scrollbar1 = new java.awt.Scrollbar();
    lagreKnapp = new javax.swing.JButton();
    tKnapp = new javax.swing.JButton();
    label1 = new java.awt.Label();
    jLabel2 = new javax.swing.JLabel();
    txtType = new javax.swing.JTextField();
    jLabel1 = new javax.swing.JLabel();
    txtAntall = new javax.swing.JTextField();
    jLabel3 = new javax.swing.JLabel();
    txtPris = new javax.swing.JTextField();
    jLabel4 = new javax.swing.JLabel();
    jButton1 = new javax.swing.JButton();
    jScrollPane2 = new javax.swing.JScrollPane();
    jList2 = new JList();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("Registrer kjøp av ved - Dagsverket");
    setAlwaysOnTop(true);
    setResizable(false);

    lagreKnapp.setFont(new java.awt.Font("sansserif", 0, 14)); // NOI18N
    lagreKnapp.setText("Lagre");
    lagreKnapp.setPreferredSize(new java.awt.Dimension(95, 50));
    lagreKnapp.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            lagreKnappActionPerformed(evt);
        }
    });

    tKnapp.setFont(new java.awt.Font("sansserif", 0, 14)); // NOI18N
    tKnapp.setText("Tilbake");
    tKnapp.setPreferredSize(new java.awt.Dimension(75, 30));
    tKnapp.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            tKnappActionPerformed(evt);
        }
    });

    label1.setText("label1");

    jLabel2.setFont(new java.awt.Font("sansserif", 1, 14)); // NOI18N
    jLabel2.setText("Vedtype:");
    jLabel2.setFocusable(false);
    jLabel2.setPreferredSize(new java.awt.Dimension(70, 25));

    jLabel1.setFont(new java.awt.Font("sansserif", 1, 14)); // NOI18N
    jLabel1.setText("Antall sekker:");
    jLabel1.setFocusable(false);
    jLabel1.setName(""); // NOI18N
    jLabel1.setPreferredSize(new java.awt.Dimension(70, 25));

    jLabel3.setFont(new java.awt.Font("sansserif", 1, 14)); // NOI18N
    jLabel3.setText("Pris pr/sekk:");

    jLabel4.setFont(new java.awt.Font("SansSerif", 1, 14)); // NOI18N
    jLabel4.setText("Kunde:");

    jButton1.setFont(new java.awt.Font("SansSerif", 0, 14)); // NOI18N
    jButton1.setText("Registrer Ny Kunde");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

此代码由GUI生成器生成。我还应该指出,这个类是帮助显示GUI的几个类之一。每个类负责用户请求的一个操作。它们都收集在一个名为主页的类中,该类用于运行整个程序的类系统中。在系统中做的第一件事是创建数据库对象,并连接到数据库。然后,在每个GUI类中使用这个数据库对象作为参数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-09 12:05:39

null显然是null。为什么?因为您在fyllListe()方法中调用initComponents()方法,这是在构造函数的d1字段初始化之前,所以请更改顺序,正确的构造函数是:

代码语言:javascript
复制
public RegVedKjøp(Database d1) {
    this.d1 = d1;
    initComponents();
}
票数 0
EN

Stack Overflow用户

发布于 2014-04-09 11:19:21

从你写的。最可能的原因是d1是空的。当RegVedKj p正在创建。然后数据库d1在类中为null。

如果我是你的话。我将调试并检查数据库d1是否为空。但是,由于您还没有添加堆栈跟踪,所以很难准确地说明。方法visKunde中有一些变量,也可能为null。因为它们是在方法之外创建的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22960648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档