12. februar 2005 - 22:55 Der er 43 kommentarer og
1 løsning

En nullPointerExceptioin?

Hej alle..

ER der nogen, der kan fortælle mig, hvorfor jeg får en nullPointer exception ved følgende kode:

jeg kalder fra metoden:

private void rollButton_actionPerformed(ActionEvent e)
  {
    rollinput.setText("h"+gui.control.dice());
   
  }

til følgende:

import java.util.Random;

public class Kontrol
{
 
  int num;
 
  public Kontrol()
  {
   
  }
  public int dice()
  {
    Random generator = new Random();
   
    num =0;
    num = generator.nextInt(100)+1;
 
  //if (num>=96 | num==66)
  //num += generator.nextInt(100)+1;
  // System.out.println(""+num);
  return num;
  }
}
Avatar billede kalp Novice
12. februar 2005 - 22:59 #1
num = (int) (Math.random()*100+1 );


prøv den istedet for

num = generator.nextInt(100)+1;
Avatar billede arne_v Ekspert
12. februar 2005 - 23:04 #2
3 muligheder:

rollinput er null
gui er null
gui.control er null

find ud af hvilken og ret det
Avatar billede kalp Novice
12. februar 2005 - 23:04 #3
+gui.control.dice()

bliver da egentlig forvirret over 2 gange punktum!!!
12. februar 2005 - 23:05 #4
Hej Kalp

nej desværre, det var ikke det
12. februar 2005 - 23:07 #5
hej Arne v..

øhh..hvordan gør jeg det?
Avatar billede arne_v Ekspert
12. februar 2005 - 23:07 #6
Skriver dem ud !
Avatar billede arne_v Ekspert
12. februar 2005 - 23:08 #7
private void rollButton_actionPerformed(ActionEvent e)
  {
    System.out.println(rollinput);
    System.out.println(gui);
    System.out.println(gui.control);
    rollinput.setText("h"+gui.control.dice());
  }
Avatar billede kalp Novice
12. februar 2005 - 23:08 #8
skulle også lige til at sige det kunne være smart hvis man vidste hvilke exception det er;)
12. februar 2005 - 23:09 #9
+gui.control.dice() bør virke kalp
Avatar billede arne_v Ekspert
12. februar 2005 - 23:09 #10
kalp>

Jeg har ligesom fået indtrykker at det er NullPointerException ...
12. februar 2005 - 23:10 #11
det står i overskriften kalp
Avatar billede kalp Novice
12. februar 2005 - 23:11 #12
nåhh ja.. sådan er det jo når man ryger for meget :o) ---> joke
12. februar 2005 - 23:13 #13
Hej Arne v

Det er gui, der er null
Avatar billede kalp Novice
12. februar 2005 - 23:14 #14
har du initialiseret din gui?
Avatar billede arne_v Ekspert
12. februar 2005 - 23:14 #15
OK

så skal du jo have fundet ud af hvorfor den er det !
Avatar billede arne_v Ekspert
12. februar 2005 - 23:15 #16
Og vi skal nok se noget mere kode hvis vi skal bidrage til det.

Men muligvis er det ret nemt at finde når nu dy ved hvad det er du skal kigge efter.
12. februar 2005 - 23:19 #17
Ok min gui kode fylder en del...

Men først... er det ikke nok at i den JFrame jeg kalder fra kalder til gui, der kalder til kontrolklassen, når der i min frame står GUI gui; samt i min GUI står Kontrol control; ??
12. februar 2005 - 23:20 #18
package mypackage1;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
//import javax.naming.ldap.Control;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.JDesktopPane;
import javax.swing.ImageIcon;
import java.awt.Image;

public class GUI extends JFrame implements Serializable

    Kontrol control;
    CharIcon enemyIcon;
    Attacker attack;
    Defender defend;
    Dialog dia;
    App app;
    JDesktopPane desktop;
    JPanel p;
    ArrayList array;
    Object hej;
    int antal;
    ImageIcon icon;
   
    public GUI()
   
    { 
        super("Merp-HelpDesk");
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        //Dimension frameSize = content.getSize();
        setSize(screenSize.width, screenSize.height-30);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
       
                   
        desktop = new JDesktopPane();
        //setContentPane(desktop);
        final JPanel p = new JPanel(new GridBagLayout());
        desktop.setBackground(new Color(67, 175, 16));
        desktop.addComponentListener(new ComponentAdapter()
        {
          public void ComponentResized(ComponentEvent ev)
          {
            Dimension desktopSize = desktop.getSize();
            p.setBounds(0,0,desktopSize.width, desktopSize.height);
            p.validate();
          }
        });
        desktop.add(p);
       
               
        JPanel buttonPanel = new JPanel();       
       
        JButton addEnemy = new JButton("Add Enemy");
        addEnemy.setBackground(Color.getHSBColor(12,23,345));
        addEnemy.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            { 
              AddEnemy();
              System.out.println("add");
            }
        });
       
               
        JButton nextRound = new JButton("Next Round");
        nextRound.setBackground(Color.getHSBColor(12,23,345));
        nextRound.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
             
            }
        });

        JButton save = new JButton("Save");
        save.setBackground(Color.getHSBColor(12,23,345));
        save.addActionListener(new ActionListener()
       
        {
            public void actionPerformed(ActionEvent event)
            {
              array.trimToSize();
              try
              {
                FileOutputStream file = new FileOutputStream("Savings.ser");
                ObjectOutputStream outStream = new ObjectOutputStream(file);
               
                outStream.writeObject(array);
                outStream.close();
                //file.close();
              } 
              catch(Exception e)
              {}
            }
        });
        JButton load = new JButton("Load");
        load.setBackground(Color.getHSBColor(12,23,345));
       
        buttonPanel.add(addEnemy);
        buttonPanel.add(nextRound);
        buttonPanel.add(save);
        buttonPanel.add(load);

        getContentPane().add(desktop, BorderLayout.CENTER);
        getContentPane().add(buttonPanel, BorderLayout.SOUTH);
       
        control = new Kontrol();
        attack = new Attacker();
        desktop.add(attack);
        attack.setVisible(true);
        defend = new Defender();
        desktop.add(defend);
        defend.setVisible(true);
        dia = new Dialog();
        desktop.add(dia);
        dia.setVisible(true);
    }
   
    public void AddEnemy()
    { 
        /*
        int count = desktop.getAllFrames().length;
        enemyIcon = new CharIcon();
       
        desktop.add(enemyIcon);
        //charIcon.setLocation(count*8,count*8);
        //charIcon.setVisible(true);
        array.add(enemyIcon);
       
        System.out.println(array.size());
          */
      int count = desktop.getComponentCount();
         
      icon = new ImageIcon("dwarf.gif");
      JLabel charIcon = new JLabel(icon);

      charIcon.setBounds(new Rectangle(155, 40, icon.getIconWidth(), icon.getIconHeight())); 
      charIcon.setLocation(count*8,count*8);
      charIcon.addMouseListener(new java.awt.event.MouseAdapter()
      {
        public void mouseClicked(MouseEvent e)
        {
          if (e.getButton()==3 &&  e.getClickCount() == 2)
            højreDobKlik(e);
          else
         
            if ( e.getClickCount() == 2)
              dobbeltKlik(e);
        }
      });
      desktop.add(charIcon);
      charIcon.setVisible(true);
     
      add_c(charIcon);
    }
   

 
  private void dobbeltKlik(MouseEvent e)
  {
    System.out.println("Dobbeltklik");
  }
  private void højreDobKlik(MouseEvent e)
  {
    System.out.println("højre/Dobbeltklik");
  }


    public void add_c(final Component c)
      {    c.addMouseMotionListener(new MouseMotionAdapter()
      {    public void mouseDragged(MouseEvent m)
      {
          c.setLocation((c.getX()+m.getX())-(icon.getIconWidth()/2),(c.getY()+m.getY())-(icon.getIconHeight()/2));
      }});
          //this.getContentPane().add(c);
      } 

}
Avatar billede kalp Novice
12. februar 2005 - 23:20 #19
nej det er referencer
Avatar billede kalp Novice
12. februar 2005 - 23:21 #20
du skal give dine reference nogen værdier..

fx.

control = ?? ;

og det gør du i din kontruktør
Avatar billede kalp Novice
12. februar 2005 - 23:22 #21
det samme gælder din gui.. du har oprettet en reference til den.. men ikke initialiseret den.. altså ud fra det du skrev.. nu har jeg ikke set din kode
Avatar billede arne_v Ekspert
12. februar 2005 - 23:23 #22
I hvilken klasse ligger

private void rollButton_actionPerformed(ActionEvent e)

?
Avatar billede kalp Novice
12. februar 2005 - 23:25 #23
i din frame.. laver du også en

gui = new GUI();

?
12. februar 2005 - 23:27 #24
Hej Kalp

min App initialiserer min GUI klasse og
min gui initialiserer en frame "dialog", samt den initialiserer control klassen.

i min "dialog" har jeg skrevet GUI gui; hvor at kunne kalde en metode gennem GUI klassen til kontrol klassen.
Avatar billede kalp Novice
12. februar 2005 - 23:28 #25
hvis jeg har forstået det rigtigt.. så skal du i din dialog have en reference med til din gui
12. februar 2005 - 23:29 #26
hej kalp

control = new Kontrol();  står lidt nede på siden
Avatar billede kalp Novice
12. februar 2005 - 23:29 #27
dvs. når du laver din frame.. skal du have this. med som parameter..

og i din dialog.. skal gui = den parameter
Avatar billede arne_v Ekspert
12. februar 2005 - 23:29 #28
Så skal du formentlig have en konstruktion som:

GUI.java:

...
dialog d = new dialog(this);
..

dialog.java:

...
GUI gui;
...
public dialog(GUI gui) {
  this.gui = gui;
}
...

for at dialog har en reference til den rigtige GUI instans
Avatar billede kalp Novice
12. februar 2005 - 23:30 #29
jeghaderorganisation :)

Kommentar: kalp
12/02-2005 23:28:34

Kommentar: kalp
12/02-2005 23:29:12

og et flot eksempel på det

Kommentar: arne_v
12/02-2005 23:29:12

slut resultat.. du initialiserede altså ikke din gui.. i din frame.. der oprettede du bare en reference til et gui objekt;)
12. februar 2005 - 23:33 #30
hej Arne

min Private void roll... metode ligger i en framen dialog som bliver initialiseret af GUI.

Spørgsmålet er vel at jeg kun har sat en reference tilbage fra dialog til Gui klassen

"GUI gui;" er det ikke fint, da GUI'en er blevet initialiseret én gang fra App klassen.
Avatar billede kalp Novice
12. februar 2005 - 23:36 #31
GUI gui;

er jo bare en reference til et gui objekt.... du har ikke angivet hvilket!!
Avatar billede kalp Novice
12. februar 2005 - 23:36 #32
det gør du ved at initialisere det med gui = det gui objekt som det skal rumme
Avatar billede arne_v Ekspert
12. februar 2005 - 23:37 #33
GUI.java:

...
Dialog dia = new Dialog(this);
..

Dialog.java:

...
GUI gui;
...
public Dialog(GUI gui) {
  this.gui = gui;
}
...
12. februar 2005 - 23:42 #34
Hej Kalp


#¤%&¤%¤ arrrhhh  selvfølgelig....

kan jeg sku ikke sige, da det var en ting jeg ikke havde helt styr på..

Men hurra det virkede....

Mange tak
Avatar billede kalp Novice
12. februar 2005 - 23:43 #35
og du forstod hvorfor?:)
12. februar 2005 - 23:43 #36
Nå nej vent lige...det var skyu da Arne  der gav det rigtige svar
12. februar 2005 - 23:45 #37
Hold da op den er svær...i får begge to point.
12. februar 2005 - 23:46 #38
pis, nu gav jeg mig selv point....øjeblik
12. februar 2005 - 23:48 #39
hvordan fanden giver jeg jeres point nu...ved i det?
Avatar billede kalp Novice
12. februar 2005 - 23:50 #40
Du bliver nød til at oprette et nyt spørgsmål i java katagorien... husk at smide et link hertil i det nye spørgsmål så folk kan se hvad det drejer sig om
Avatar billede arne_v Ekspert
12. februar 2005 - 23:51 #41
Avatar billede kalp Novice
12. februar 2005 - 23:53 #42
arne_v>> hmm.. han skal da ikke give flere point.. han har afsluttet dette spørgsmål
Avatar billede kalp Novice
12. februar 2005 - 23:54 #43
Avatar billede arne_v Ekspert
13. februar 2005 - 00:00 #44
titlen passer ikke men proceduren gør
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