簡體   English   中英

AWT-EventQueue-0 NullPointerException

[英]AWT-EventQueue-0 NullPointerException

我對Java很陌生,並且正在嘗試用數據庫中的數據填充JList。 通過Database類中的visKunder()方法從數據庫中檢索數據。

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中調用visKunder()時,會發生問題。 printStackTrace()將visKunder()列為NullPointerException的問題。

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 Builder設計GUI。 任何有關如何解決此問題的技巧將不勝感激。

編輯:

    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 Builder生成。 我還應該指出,此類是幫助顯示GUI的幾個類之一。 每個類負責用戶請求的一項操作。 它們全都收集在稱為Mainpage的類中,該類在運行整個程序的System類中使用。 在System中完成的第一件事是創建Database對象以及與數據庫的連接。 然后,此數據庫對象就是每個GUI類中用作參數的對象。

從你寫的。 最可能的原因是d1為空。 創建RegVedKjøp時。 然后,數據庫d1在該類中為空。

如果我會成為你。 我將調試並檢查Database d1是否為null。 但是由於您尚未添加堆棧跟蹤,因此很難確切地說出。 在visKunde方法中有一些變量,也可以為null。 由於它們是在方法外部創建的。

d1顯然為null 為什么? 好吧,因為您在initComponents()方法上調用了fyllListe()方法,該方法在initComponents()函數的d1字段初始化之前,所以請更改順序,正確的構造函數是:

public RegVedKjøp(Database d1) {
    this.d1 = d1;
    initComponents();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM