-1

JLabel 遇到 NullPointerException 问题,我完全不知道问题出在哪里。问题在于“beskjed”JLabel。

“endeligPris1”JLabel 也有一个不同方法的 setText,但该 JLabel 没有问题。

任何帮助将不胜感激。

public class Salgsvindu extends JFrame implements ActionListener, ItemListener
{
     private JPanel vinduPanel, brukerPanel, infoPanel, jtfPanel, displayPanel, beskjedPanel,      radioPanel;
     private JButton bekreft1, bekreft2, bekreft3;
     private JLabel fornavn, etternavn, nasjonalitet, adresse, fdato, genus, tlf, pris, typerkort, kundenr, endeligPris1, endeligPris2, heiser;
     private JLabel beskjed;
     private JTextField jtfFornavn, jtfEtternavn, jtfAdresse, jtfFdato, jtfTlf, jtfKundenr;
     private JComboBox kortTyperCombo1  = new JComboBox();
     private JComboBox kortTyperCombo2 = new JComboBox();
     private JComboBox nasjonalitetCombo = new JComboBox();
     private JComboBox heisCombo = new JComboBox();
     private JTextArea display;
     private final static String BUTTONPANEL = "Ny Bruker";
     private final static String TEXTPANEL = "Nytt Kort";

public JPanel salgsvinduNyBruker()
{

    bekreft1 = new JButton("Bekreft kjøp");


    fornavn = new JLabel("Fornavn:");
    etternavn = new JLabel("Etternavn:");
    adresse = new JLabel("Adresse:");
    nasjonalitet = new JLabel("Nasjonalitet:");
    fdato = new JLabel("Fødselsdato:");
    genus = new JLabel("Kjønn");
    tlf = new JLabel("Telefonnummer:");
    pris = new JLabel("Pris:");
    endeligPris1 = new JLabel();
    typerkort = new JLabel("Typerkort:");
    beskjed = new JLabel();

    jtfFornavn = new JTextField(7);
    jtfEtternavn = new JTextField(7);
    jtfAdresse = new JTextField(7);
    jtfFdato = new JTextField(7);
    jtfTlf = new JTextField(7);

    JRadioButton jrbMann = new JRadioButton("M", false);
    JRadioButton jrbKvinne = new JRadioButton("K", false);
    radioPanel = new JPanel(new GridLayout(1,0));
    radioPanel.add(jrbMann);
    radioPanel.add(jrbKvinne);
    ButtonGroup radioGenus = new ButtonGroup();
    radioGenus.add(jrbMann);
    radioGenus.add(jrbKvinne);


    //Bunn JPanel til å legge resten på.
    JPanel btnPanel = new JPanel(new BorderLayout())
    {
        @Override
        protected void paintComponent(Graphics grphcs)
        {

            Graphics2D g2d = (Graphics2D) grphcs;
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);
            GradientPaint gp = new GradientPaint(0, 0,
                    getBackground().brighter().brighter(), 0, getHeight(),
                    getBackground().darker().darker());

            g2d.setPaint(gp);
            g2d.fillRect(0, 0, getWidth(), getHeight());

            super.paintComponent(grphcs);
        }
    };

    JLabel label = new JLabel();
    label.setIcon(new javax.swing.ImageIcon(getClass().getResource("Logo.png")));
    btnPanel.add( label , BorderLayout.PAGE_START);

    JPanel regPanel = new JPanel(new GridLayout(9,2));
    regPanel.setOpaque(false);
    btnPanel.add(regPanel, BorderLayout.LINE_START);



    regPanel.add(fornavn);
    regPanel.add(jtfFornavn);
    regPanel.add(etternavn);
    regPanel.add(jtfEtternavn);
    regPanel.add(adresse);
    regPanel.add(jtfAdresse);
    regPanel.add(genus);
    regPanel.add(radioPanel);
    regPanel.add(nasjonalitet);
    regPanel.add(nasjonalitetCombo);
    regPanel.add(fdato);
    jtfFdato.setText("yyyyMMdd");
    regPanel.add(jtfFdato);
    regPanel.add(tlf);
    regPanel.add(jtfTlf);
    regPanel.add(typerkort);
    kortTyperCombo1.addItemListener(this);
    regPanel.add(kortTyperCombo1);
    regPanel.add(pris);
    regPanel.add(endeligPris1);
    bekreft1.addActionListener(this);
    btnPanel.add(bekreft1, BorderLayout.PAGE_END);

    btnPanel.add(beskjed, BorderLayout.CENTER);

    btnPanel.setOpaque(true);
    lastKortTyper();
    lastNasjonalitet();
    return btnPanel;
}

public void jtfNyBrukerTilString()
{
    Tidspunkt t = new Tidspunkt();
    BekreftNyBruker b = new BekreftNyBruker();



    String dbFornavn = jtfFornavn.getText();
    String dbEtternavn = jtfEtternavn.getText();
    String dbFdat = jtfFdato.getText();
    int dbFdato = Integer.parseInt(dbFdat);
    String dbTlf = jtfTlf.getText();
    String dbkortTyper = (String)kortTyperCombo1.getSelectedItem();
    String dbNasjonalitet = (String)nasjonalitetCombo.getSelectedItem();
    int dbStartDato = t.getDateTime(); 
    int dbSluttDato = 0;



    b.bekreft(dbFornavn, dbEtternavn, dbFdato, dbTlf, dbkortTyper, dbNasjonalitet, dbStartDato, dbSluttDato);


}


/**The method were I get the NullPointerException. Getting NullPointerException in any case what I setText as.**/

public void registrertNyB(String fornavn, String etternavn, String kortType, int kortNr, int kundeNr)
{
    beskjed.setText("problem"); // NullPointerException here.
}

public void actionPerformed(ActionEvent e)
{
    if(e.getSource() == bekreft1)
        jtfNyBrukerTilString();
}
}

另一个班级。

public class BekreftNyBruker
{

public void bekreft(String dbFornavn, String dbEtternavn, int dbFdato, String dbTlf, String dbkortTyper, String dbNasjonalitet, int dbStartDato, int dbSluttDato)
{

    if("Dag".equals(dbkortTyper))
    {
        dbSluttDato = dbStartDato;
    }
    else
    {
        dbSluttDato = 0;
    }  

    finnesBruker( dbFornavn, dbEtternavn, dbFdato, dbTlf, dbkortTyper, dbNasjonalitet, dbStartDato, dbSluttDato);
}




public static void finnesBruker( String fornavn, String etternavn, int fdato, String tlf, String kortTyper, String nasjonalitet, int startDato, int sluttDato)
{
    Connection con = null;
    DatabaseConnection d = new DatabaseConnection();


    try
    {
        Class.forName(d.getDriver());
        con = DriverManager.getConnection(d.getUrl() + d.getDb(), d.getUser(), d.getPass());

        try
        {

            PreparedStatement st = con.prepareStatement("SELECT Fornavn, Etternavn, FDato, Telefon, landskode_Land FROM kundetabell WHERE Fornavn = ? AND Etternavn = ? AND FDato = ? AND Telefon = ? AND landskode_Land = ?");
            st.setString(1, fornavn);
            st.setString(2, etternavn);
            st.setInt(3, fdato);
            st.setString(4, tlf);
            st.setString(5, nasjonalitet);
            ResultSet res = st.executeQuery();

            String fnavn = "";
            String enavn = "";
            String ttlf = "";
            String nasj = "";
            int ffdato = 0;

            while(res.next())
            {
                fnavn = res.getString("Fornavn");
                enavn = res.getString("Etternavn");
                ffdato = res.getInt("FDato");
                ttlf = res.getString("Telefon");
                nasj = res.getString("landskode_Land");

            }

            if(fornavn.equals(fnavn) && etternavn.equals(enavn) && fdato == ffdato && tlf.equals(ttlf) && nasjonalitet.equals(nasj) )
            {
                //< Kode som skriver ut i displayet at brukeren finnes fra før >
            } 
            else
            {
                nyBruker( fornavn, etternavn, fdato, tlf, kortTyper, nasjonalitet, startDato, sluttDato);
            }



            st.close();
            res.close();
            con.close();

        }
        catch (SQLException s)
        {
            Logger.getLogger(BekreftNyBruker.class.getName()).log(Level.SEVERE, null, s);

        }
    }
    catch (Exception e)
    {
        Logger.getLogger(BekreftNyBruker.class.getName()).log(Level.SEVERE, null, e);
    }
}


public static void nyBruker(String fornavn, String etternavn, int fdato, String tlf, String kortTyper, String nasjonalitet, int startDato, int sluttDato)
{
    Connection con = null;

    DatabaseConnection d = new DatabaseConnection();


    try
    {
        Class.forName(d.getDriver());
        con = DriverManager.getConnection(d.getUrl() + d.getDb(), d.getUser(), d.getPass());

        try
        {
            PreparedStatement st = con.prepareStatement("INSERT INTO kundetabell(Fornavn, Etternavn, FDato, Telefon, landskode_land) VALUES(?, ?, ?, ?, ?)");
            st.setString(1, fornavn);
            st.setString(2, etternavn);
            st.setInt(3, fdato);
            st.setString(4, tlf);
            st.setString(5, nasjonalitet);
            st.executeUpdate();

            st.close();
            con.close();
        }
        catch (SQLException s)
        {
            Logger.getLogger(BekreftNyBruker.class.getName()).log(Level.SEVERE, null, s);
        }

    }
    catch (Exception e)
    {
        Logger.getLogger(BekreftNyBruker.class.getName()).log(Level.SEVERE, null, e);
    }

    hentKortInfo(fornavn, etternavn, fdato, tlf, kortTyper, nasjonalitet, startDato, sluttDato);

} 


public static void hentKortInfo(String fornavn, String etternavn, int fdato, String tlf, String kortTyper, String nasjonalitet, int startDato, int sluttDato)
{
    Connection con = null;
    DatabaseConnection d = new DatabaseConnection();


    try
    {
        Class.forName(d.getDriver());
        con = DriverManager.getConnection(d.getUrl() + d.getDb(), d.getUser(), d.getPass());

        try
        {
            PreparedStatement state = con.prepareStatement("SELECT Klipp, TypeNr FROM billettypetabell WHERE Billettnavn = ?");
            state.setString(1, kortTyper);
            ResultSet rs = state.executeQuery();

            int antallKlipp = 0; 
            int typeNr = 0;

            while(rs.next())
            {
                antallKlipp = rs.getInt("Klipp");
                typeNr = rs.getInt("TypeNr");
            }
            state.close();
            rs.close();
            con.close();

            hentKundeNr(fornavn, etternavn, fdato, tlf, kortTyper, nasjonalitet, startDato, sluttDato, antallKlipp, typeNr);
        }
        catch (SQLException s)
        {
            System.out.println("Feil3");
        }

    }
    catch (Exception e)
    {
        System.out.println(e);
    }

}

public static void hentKundeNr(String fornavn, String etternavn, int fdato, String tlf, String kortTyper, String nasjonalitet, int startDato, int sluttDato, int antallKlipp, int typeNr)
{
    Connection con = null;
    DatabaseConnection d = new DatabaseConnection();


    try
    {
        Class.forName(d.getDriver());
        con = DriverManager.getConnection(d.getUrl() + d.getDb(), d.getUser(), d.getPass());

        try
        {

            PreparedStatement stat = con.prepareStatement("SELECT KundeNr FROM kundetabell WHERE Fornavn = ? AND Etternavn = ? AND FDato = ? AND Telefon = ? AND landskode_Land = ?");
            stat.setString(1, fornavn);
            stat.setString(2, etternavn);
            stat.setInt(3, fdato);
            stat.setString(4, tlf);
            stat.setString(5, nasjonalitet);
            ResultSet res = stat.executeQuery();

            int kundeNr = 0; 

             while(res.next())
            {
                kundeNr = res.getInt("KundeNr");
            }
            stat.close();
            res.close();
            con.close();

            settInnkort(fornavn, etternavn, fdato, tlf, kortTyper, nasjonalitet, startDato, sluttDato, antallKlipp, typeNr, kundeNr);
        }
        catch (SQLException s)
        {
            Logger.getLogger(BekreftNyBruker.class.getName()).log(Level.SEVERE, null, s);
        }

    }
    catch (Exception e)
    {
        Logger.getLogger(BekreftNyBruker.class.getName()).log(Level.SEVERE, null, e);
    }
}

public static void settInnkort(String fornavn, String etternavn, int fdato, String tlf, String kortTyper, String nasjonalitet, int startDato, int sluttDato, int antallKlipp, int typeNr, int kundeNr)
{
    Connection con = null;
    DatabaseConnection d = new DatabaseConnection();


    try
    {
        Class.forName(d.getDriver());
        con = DriverManager.getConnection(d.getUrl() + d.getDb(), d.getUser(), d.getPass());

        try
        {               
            PreparedStatement stmt = con.prepareStatement("INSERT INTO korttabell(StartDato, SluttDato, AntallKlipp, BillettypeTabell_TypeNr, Kundetabell_KundeNr)" + 
                    "VALUES(?, ?, ?, ?, ?)");
            stmt.setInt(1, startDato );
            stmt.setInt(2, sluttDato );
            stmt.setInt(3, antallKlipp );
            stmt.setInt(4, typeNr );
            stmt.setInt(5, kundeNr );
            stmt.executeUpdate();


            hentKundeNr(fornavn, etternavn, kortTyper, startDato, sluttDato, antallKlipp, typeNr, kundeNr);

            stmt.close();
            con.close();
        }
        catch (SQLException s)
        {
            Logger.getLogger(BekreftNyBruker.class.getName()).log(Level.SEVERE, null, s);
        }   
    }
    catch (Exception e)
    {
        Logger.getLogger(BekreftNyBruker.class.getName()).log(Level.SEVERE, null, e);
    }

}

public static void hentKundeNr(String fornavn, String etternavn, String kortType, int startDato, int sluttDato, int antallKlipp, int typeNr,int kundeNr)
{
    Connection con = null;
    DatabaseConnection d = new DatabaseConnection();


    try
    {
        Class.forName(d.getDriver());
        con = DriverManager.getConnection(d.getUrl() + d.getDb(), d.getUser(), d.getPass());

        try
        {

            PreparedStatement st = con.prepareStatement("SELECT KortNr FROM korttabell WHERE StartDato = ? AND SluttDato = ? AND "
                    + "AntallKlipp = ? AND billettypetabell_TypeNr = ? AND kundetabell_KundeNr = ?");
            st.setInt(1, startDato);
            st.setInt(2, sluttDato);
            st.setInt(3, antallKlipp);
            st.setInt(4, typeNr);
            st.setInt(5, kundeNr);
            ResultSet rs = st.executeQuery();

            int kortNr = 0; 

             while(rs.next())
            {
                kortNr = rs.getInt("KortNr");
            }
            st.close();
            rs.close();
            con.close();

            Salgsvindu s = new Salgsvindu();
            s.registrertNyB(fornavn, etternavn, kortType, kortNr, kundeNr);

        }
        catch (SQLException s)
        {
            Logger.getLogger(BekreftNyBruker.class.getName()).log(Level.SEVERE, null, s);
        }

    }
    catch (Exception e)
    {
        Logger.getLogger(BekreftNyBruker.class.getName()).log(Level.SEVERE, null, e);
    }
}
}

堆栈跟踪

May 11, 2013 10:28:54 PM skisenter.BekreftNyBruker hentKundeNr
SEVERE: null
java.lang.NullPointerException
at skisenter.Salgsvindu.registrertNyB(Salgsvindu.java:312)
at skisenter.BekreftNyBruker.hentKundeNr(BekreftNyBruker.java:334)
at skisenter.BekreftNyBruker.settInnkort(BekreftNyBruker.java:283)
at skisenter.BekreftNyBruker.hentKundeNr(BekreftNyBruker.java:241)
at skisenter.BekreftNyBruker.hentKortInfo(BekreftNyBruker.java:189)
at skisenter.BekreftNyBruker.nyBruker(BekreftNyBruker.java:151)
at skisenter.BekreftNyBruker.finnesBruker(BekreftNyBruker.java:88)
at skisenter.BekreftNyBruker.bekreft(BekreftNyBruker.java:35)
at skisenter.Salgsvindu.jtfNyBrukerTilString(Salgsvindu.java:261)
at skisenter.Salgsvindu.actionPerformed(Salgsvindu.java:523)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6382)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3275)
at java.awt.Component.processEvent(Component.java:6147)
at java.awt.Container.processEvent(Container.java:2083)
at java.awt.Component.dispatchEventImpl(Component.java:4744)
at java.awt.Container.dispatchEventImpl(Container.java:2141)
at java.awt.Component.dispatchEvent(Component.java:4572)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4619)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4280)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4210)
at java.awt.Container.dispatchEventImpl(Container.java:2127)
at java.awt.Window.dispatchEventImpl(Window.java:2489)
at java.awt.Component.dispatchEvent(Component.java:4572)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:710)
at java.awt.EventQueue.access$400(EventQueue.java:82)
at java.awt.EventQueue$2.run(EventQueue.java:669)
at java.awt.EventQueue$2.run(EventQueue.java:667)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:683)
at java.awt.EventQueue$3.run(EventQueue.java:681)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:680)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
4

1 回答 1

0

从堆栈跟踪来看,似乎 beskjed 在调用时必须为空。我可以看到 beskjed 被初始化的地方,但我看不到初始化它的方法(salgsvinduNyBruker)被调用的地方。可能会调用它,然后将 beskjed 设置为 null,但更可能的是,beskjed 没有被初始化。在代码中查找所有对 beskjed 的引用,将其放入调试器中,这应该不难找到。

于 2013-05-11T21:04:19.970 回答