Avatar billede web_the_world Nybegynder
17. marts 2003 - 16:55 Der er 9 kommentarer og
1 løsning

ny runtime error

hej igen..Nu har jeg nok engang fået en mærkelig runtime fejl...

Her drejer det sig om indsættelse af et tekstarea...

Der er igen indsat to klasser nedenfor:

klasse 1:
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;

public class Spm3 extends JPanel implements ActionListener
{
    private Button søg, slut;    //trykknapper til hhv. at indsætte i databasen og afslutte
    private TextField nr, dato;        //tekstfelter til hhv. varenr og -navn

    private TextArea resultat;

    private JPanel panel;

    private Connection con;            //databaseforbindelses-objektet

    public Spm3(Connection con)
    //konstruktør, sætter vinduet op
    {
        this.con= con;                    //overfør den modtagne databaseforbindelse

        setSize(80,280);                //sæt vinduets størrelse
        setLocation(100,100);            //og placering (målt i pixels)

        setLayout(new FlowLayout());    //vælg layoutmanageren 'FlowLayout'

        add(new Label("Indtast Vognnr"));    //skriv ledeteksten 'vare nr'
        nr= new TextField(10);            //definer og tilføj tekstfeltet nr
        add(nr);

        add(new Label("Indtast Dato"));    //do. for 'vare navn'
        dato= new TextField(10);        //..
        add(dato);

        resultat = new TextArea(10, 45);

        søg= new Button("Søg");    //definer og tilføj indsæt-knappen
        add(søg);
        søg.addActionListener(this);    //registrer indsæt-knappen, så tryk på
                                        //den kan opfanges

        slut= new Button("Afslut");        //definer og tilføj slut-knappen
        add(slut);
        slut.addActionListener(this);    //registrer slut-knappen, så tryk på den
                                        //kan opfanges




        panel.add(resultat);
    }

    public void actionPerformed(ActionEvent e)
    //metode, der kaldes automatisk, når brugeren trykker på én af de registrerede
    //trykknapper (indsæt eller slut).
    {
        if (e.getSource()==søg)        //hvis det var indsætknappen
        {
            try
            {

                //konstruer, send og udfør flg. sql-sætning:
                //INSERT INTO vare VALUES ('<intastet vare nr>', '<indtastet vare navn>')

                Statement s= con.createStatement(); //opretter sætningsobjektet

                String SQL= "INSERT INTO prove VALUES ('"
                                + Integer.parseInt(nr.getText()) + "','"
                                + dato.getText()+ "')";

                s.executeUpdate(SQL);


                System.out.println(SQL);    //udskriv den udførte sql-sætning på konsollen så den evt. kan kontrolleres
            }
            catch(Exception ex){System.out.println(ex);}
        }
        else if (e.getSource()==slut)            //ellers hvis det var slut-knappen
        {
            try
            {
                con.close();                    //nedlæg forbindelsen til myDB
            }
            catch (Exception ex){System.out.println(ex);}
            System.exit(0);                            //afslut
        }
    }
}


KLasse 2:
import java.sql.*;
import javax.swing.*;

public class LayoutDemo
{
static Connection con;
      public static void main(String[] args) throws Exception

  {

      //load driveren og opret et forbindelsesobjekt til taxa2
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

        Connection con = DriverManager.getConnection("jdbc:odbc:Taxa2");

      JFrame frame = new JFrame ("Layout Manager Demo");
      frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
      frame.setTitle("TAXA Thomas");
      JTabbedPane tp = new JTabbedPane();
      //tp.addTab ("Oversigt", new IntroPanel());
      tp.addTab ("Spm 3", new Spm3(con));
      //tp.addTab ("Spm 4", new Spm4(con));
      //tp.addTab ("Spm 5", new Spm5(con));
      //tp.addTab ("Spm 6", new Spm6(con));
      //tp.addTab ("Spm 7", new Prove(con));

      frame.getContentPane().add(tp);
      frame.pack();
      frame.show();
  }
}
Avatar billede web_the_world Nybegynder
17. marts 2003 - 16:58 #1
Og giver følgende fejl:

Den angivne sti blev ikke fundet.
Exception in thread "main" java.lang.NullPointerException
        at Spm3.<init>(Spm3.java:36)
        at LayoutDemo.main(LayoutDemo.java:21)
Tryk på en vilkårlig tast for at fortsætte . . .
Avatar billede arne_v Ekspert
17. marts 2003 - 17:10 #2
panel er ikke initaliseret når du laver:

panel.add(resultat);
Avatar billede web_the_world Nybegynder
17. marts 2003 - 17:11 #3
Ved at ændre klasse 1 - til dette slipper jeg for runtime error, men den skriver ikke mit tekstarea ud??

Ps i nedenstående er ikke taget actionlistener med...

public class Spm3 extends JPanel implements ActionListener
{
    private Button søg, slut;    //trykknapper til hhv. at indsætte i databasen og afslutte
    private TextField nr, dato;        //tekstfelter til hhv. varenr og -navn

    private TextArea resultat;



    private Connection con;            //databaseforbindelses-objektet

    public Spm3(Connection con)
    //konstruktør, sætter vinduet op
    {
        this.con= con;                    //overfør den modtagne databaseforbindelse

        setSize(80,280);                //sæt vinduets størrelse
        setLocation(100,100);            //og placering (målt i pixels)

        setLayout(new FlowLayout());    //vælg layoutmanageren 'FlowLayout'

        resultat = new TextArea(10, 45);


        add(new Label("Indtast Vognnr"));    //skriv ledeteksten 'vare nr'
        nr= new TextField(10);            //definer og tilføj tekstfeltet nr
        add(nr);

        add(new Label("Indtast Dato"));    //do. for 'vare navn'
        dato= new TextField(10);        //..
        add(dato);

        søg= new Button("Søg");    //definer og tilføj indsæt-knappen
        add(søg);
        søg.addActionListener(this);    //registrer indsæt-knappen, så tryk på
                                        //den kan opfanges

        slut= new Button("Afslut");        //definer og tilføj slut-knappen
        add(slut);
        slut.addActionListener(this);    //registrer slut-knappen, så tryk på den
                                        //kan opfanges

        JPanel panel =new JPanel();
        panel.add(resultat);



    }
Avatar billede arne_v Ekspert
17. marts 2003 - 17:12 #4
Jeg vil formode at du bare ville lave en:

add(resultat);

for at tilføje resultat TextArea til Spm3 JPanel.
Avatar billede web_the_world Nybegynder
17. marts 2003 - 17:16 #5
Det jeg vil er, at have et tekstarea - hvor jeg kan få noget skrevet ud  - ud fra nogle SQL-sætninger, men lige nu vil mit tekst area ikke komme frem?
Avatar billede web_the_world Nybegynder
17. marts 2003 - 17:18 #6
yes - nu virker det...Du kan vel ikke løse mit andet problem - som er at hvis alle fanbladene er slået til i main-klassen - så skriver det ud oveni hinanden - hvad skyldes det?
Avatar billede arne_v Ekspert
17. marts 2003 - 17:18 #7
Ja din rettelse tilføjer resultat TextArea til panel, men panel
vises jo ikke nogen steder.

Det er derfor at jeg tror du mener:

add(resultat);

fordi det vil tilføje resultat TextArea til Spm3 som selv er et JPanel
og om gerne skule blive vist.
Avatar billede web_the_world Nybegynder
17. marts 2003 - 17:21 #8
ja, det virker efter det at jeg bare skriver

add(resultat);

Tak for det...Ved du hvad mit andet problem skyldes?
Avatar billede arne_v Ekspert
17. marts 2003 - 17:21 #9
Nej, fanebladene kan jeg ikke hjælpe med.

Jeg er faktisk ikke særligt skrap til Swing.
Avatar billede web_the_world Nybegynder
17. marts 2003 - 17:25 #10
ok, tak for hjælpen med det andet!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester