Avatar billede sy22 Nybegynder
12. juni 2002 - 21:48 Der er 12 kommentarer og
1 løsning

NullPointerException

Hola!
Er der nogen der er friske på at finde en nullPointerException i min ca. 3 siders kode hvis jeg poster det her?
Avatar billede jakoba Nybegynder
12. juni 2002 - 22:00 #1
Hvad med at zippe filerne og lægge et link?
Avatar billede sy22 Nybegynder
12. juni 2002 - 22:06 #2
har desværre ikke lige et sted at læge dem, men jeg vil gerne maile dem.
Avatar billede jakoba Nybegynder
12. juni 2002 - 22:11 #3
nej så bør de lægges her. selvom det fylder ad h til :-))
Avatar billede sy22 Nybegynder
12. juni 2002 - 22:16 #4
ok her kommer det ;-)

Der er tre klasser hhv. Director, Log og Gui.

Jeg tror nok fejlen findes der hvor Log sender variablerne name og kodeOrd tilbage til Director, men kan ikke lige finde præcist hvor.

Takker for hjælp



import java.util.*;
import dk.au.imv.jabber.*;
public class Director implements IJabber {
    public Log nyLog;
    public JabberServer js;
    public JID you, me;
    //public Vector friends;
    public boolean res1, res2;
    public int i;
    public Gui nyGui;

public Director(/*Log temp, Gui temp2*/) {
        //nyLog = temp;
    //nyGui = temp2;
    JabberServer js = new JabberServer(this);
    JID me = new JID();
    JID you = new JID();
    i = 0;
    new Log(this);
    new Gui(this);
    //Vector friends = new Vector();
}
public void tilslut(String name, String kodeOrd){
        me.setUsername(name);
        me.setServer("ishtar.imv.au.dk");
        me.setPassword(kodeOrd);
        System.out.println("JID: " + me);
        System.out.println(me);
        js.attachUser(me);
        js.setStatus("available");
        boolean res1 = js.createNewAccount();
        boolean res2 = js.logOn();
        js.setStatus("onLine for vildt");
        js.presenceSubscribe(you);
        js.getRoster();
        if (res2)
        System.out.println("Logon succeded");
        js.setStatus("onLine for vildt");
        //opret();
        nyGui.visgui();
        }

        /*while (friends != null({
            System.out.println(*/
    public void msgReceived(String from, String subject, String body) {
        //System.out.println("RECI:" + body);
    }
    public void rosterChange(Vector v) {
        System.out.println("VECTOR:" + v);
        /*while (i < ){
            System.out.println(x)
            i++();
        }*/
    }
    public void connectionClosed() {
        //System.out.println("conn closed");
    }
    public void opret(){
    //    temp2.visgui();
       
    }
    public void tilf(String venavn){
        //nyGui.hentVenavn();
        you.setUsername(venavn);
        you.setServer("ishtar.imv.au.dk");
        js.presenceSubscribe(you);
    }
    public static void main(String[] args) {
        new Director();
    }
   
}




import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Log implements ActionListener {

    private JFrame logfr;
    private JButton loginbt, cancelbt;
    private JTextField logtxt;
    private JTextField pswtxt;
    private JLabel pass, login;
    public String name;
    public String kodeOrd;
    public Director ref;
   
   
public Log(Director r) {
    ref = r;
    pass = new JLabel();
    login = new JLabel();   
    logfr = new JFrame();
    loginbt = new JButton();
    cancelbt = new JButton();
    logtxt = new JTextField();
    pswtxt = new JTextField();
    loginbt.setText("Log in");
    cancelbt.setText("Cancel");
    login.setText("Login name");
    pass.setText("Password");
    loginbt.addActionListener(this);
    cancelbt.addActionListener(this);
    loginbt.setBounds(20,80,70,30);
    cancelbt.setBounds(100,80,70,30);
    logfr.setBounds(400,300,200,150);
    logtxt.setBounds(100,20,80,15);
    pswtxt.setBounds(100,40,80,15);
    pass.setBounds(20,40,80,15);
    login.setBounds(20,20,80,15);
    Font newFont = new Font( "Haetenschweiler", Font.PLAIN, 10 );
        loginbt.setFont(newFont);
    cancelbt.setFont(newFont);
    logfr.getContentPane().add(pass);
    logfr.getContentPane().add(login);
    logfr.getContentPane().add(loginbt);
    logfr.getContentPane().add(cancelbt);
    logfr.getContentPane().setLayout(null);
    logfr.getContentPane().add(pswtxt);
    logfr.getContentPane().add(logtxt);
    logfr.show();
    logfr.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
});
}
public void hentNavn(){
    name = logtxt.getText();
}
public void hentKode(){
    kodeOrd = pswtxt.getText();
}
      public void actionPerformed (ActionEvent e) {
        if (e.getSource() == loginbt){
        hentNavn();
        hentKode();
        ref.tilslut(name, kodeOrd);
       
    //public void main(String[] args) {
        //new Director(this);
        //new Gui();
    //}
    }
        if (e.getSource() == cancelbt){
        System.exit(0);
    }
    }
    }





import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Gui implements ActionListener {

    private JFrame frame;
    private JButton statusButton, brugerButton;
    private JTextField nyven;
    public Log nyLog2;
    public boolean farve;
    public String venavn;
    public Director reff;

    public Gui(Director r){
      //super(temp);
      reff = r;
      frame = new JFrame();
      statusButton = new JButton();
      brugerButton = new JButton();
      nyven = new JTextField();
      //dir = new Director();
      farve = true;
    statusButton.setText("LineStatus"/*nyLog2.name*/);
      brugerButton.setText("Tilføj Bruger");
      statusButton.addActionListener(this);
      brugerButton.addActionListener(this);
      statusButton.setBackground(Color.green);
      statusButton.setBounds(120,10,100,50);
      brugerButton.setBounds(600,10,100,50);
      frame.setBounds(0,0,800,600);
      nyven.setBounds(600,80,100,20);
      frame.getContentPane().add(statusButton);
      frame.getContentPane().add(brugerButton);
      frame.getContentPane().add(nyven);
      frame.getContentPane().setLayout(null);
      //frame.show();
              frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    public void hentVenavn(){
        venavn = nyven.getText();
    }
    public void visgui(){
        frame.show();
    }
      public void actionPerformed (ActionEvent e) {
        if (e.getSource() == statusButton){
        if(farve == true){
            statusButton.setBackground(Color.green);
        }
        else if(farve == false){
            statusButton.setBackground(Color.red);
        }
        if(farve == false){
            farve = true;
        }
        else if(farve == true){
                farve = false;
        }
       
        } 
        if (e.getSource() == brugerButton){
        hentVenavn();
        reff.tilf(venavn);

        }
    }
   
}
Avatar billede jakoba Nybegynder
12. juni 2002 - 22:47 #5
Den va såmænd ikke så svær :-))  det er i forenden af din klasse Director

public class Director implements IJabber {
    public Log nyLog;
    public JabberServer js;
    public JID you, me;      // you og me er public og bruges mange steder
    public boolean res1, res2;
    public int i;
    public Gui nyGui;

public Director( ) {
    JabberServer js = new JabberServer(this);
    JID me = new JID();    // her erklares you og me som lokale variablle i
    JID you = new JID();  // constructormetoden samtidig med at de intieres
    i = 0;
    new Log(this);
    new Gui(this);
}
//  Så klassens you and me blev slet ikke initieret.

mvh JakobA
Avatar billede sy22 Nybegynder
12. juni 2002 - 23:03 #6
jeg forstår dig ikke helt, min kode ser ud som du skriver, og me, you bliver da dermed initieret...el. hvad?
Avatar billede jakoba Nybegynder
12. juni 2002 - 23:09 #7
når du skriver tupenavnet  JID  foran betyder det at variablen skal defineres Der, dvs indeni din construtor funktion som en lokal variable der forsvinder igen det øjeblik funktionen returnerer.

de to variabler der defineres i linien:
    public JID you, me;    // you og me er public og bruges mange steder
bliver aldrig initieret.
Avatar billede jakoba Nybegynder
12. juni 2002 - 23:11 #8
ret funktionen  Director()  til

public Director( ) {
    js = new JabberServer(this);
    me = new JID();
    you = new JID();
    i = 0;
    new Log(this);
    new Gui(this);
}

og se om ikke det virker en tand bedre.

mvh JakobA
Avatar billede sy22 Nybegynder
12. juni 2002 - 23:21 #9
ok så langt er jeg med...men hvor skal de så initiseres, jeg har prøvet forskellige steder, men får stadig nullPointer
Avatar billede jakoba Nybegynder
12. juni 2002 - 23:38 #10
de bliver initiere i den funktion.

men dine variable nyGui og nyLog bliver ikke initieret.

public Director( ) {
    js = new JabberServer(this);
    me = new JID();
    you = new JID();
    i = 0;
    nyLog = new Log(this);
    nyGui = new Gui(this);
}

mvh JakobA
Avatar billede sy22 Nybegynder
12. juni 2002 - 23:48 #11
nu ser min Director således ud, men der er ingen berding!

public class Director implements IJabber {
    public Log nyLog;
    public JabberServer js;
    public JID you, me;
    //public Vector friends;
    public boolean res1, res2;
    public int i;
    public Gui nyGui;

public Director(/*Log temp, Gui temp2*/) {
        //nyLog = temp;
    //nyGui = temp2;
    JabberServer js = new JabberServer(this);
    me = new JID();
    you = new JID();
    i = 0;
    nyLog = new Log(this);
    nyGui = new Gui(this);

er det ikke således det burde fungere?
Avatar billede jakoba Nybegynder
12. juni 2002 - 23:52 #12
vi mangler lige at fjerne typenavne JabberServer forrest i linien
    JabberServer js = new JabberServer(this);
så der står:
    js = new JabberServer(this);
Avatar billede sy22 Nybegynder
13. juni 2002 - 10:11 #13
Så er den der sq....takker for al din hjælp!!!
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