Avatar billede gigaload Nybegynder
06. maj 2007 - 18:22 Der er 12 kommentarer og
1 løsning

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerExcep

//Code//

/*
* Bike.java
*
* Created on 6. maj 2007, 16:21
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
/**
*
* @author Joshlo
*/
public class Bike extends javax.swing.JFrame {
   
    private JFrame frame;
    private JPanel gearpanel;
    private JPanel speedpanel;
    private JPanel pulsepanel;
    private Graphics g;
    private int x1;
    private int x2;
    private int y1;
    private int y2;
    private int y3;
   
    /** Creates a new instance of Bike */
    public Bike() {
        createFrame();
    }
   
    public void createFrame()
    {
        g.setColor(Color.GRAY);
       
        frame = new JFrame();
       
        frame.setTitle("Bike");
        frame.setSize(900,650);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        gearpanel.setSize(800,200);
        gearpanel.setLocation(100,0);
        gearpanel.setBackground(Color.BLACK);
        geargrid();
       
        speedpanel.setSize(800,200);
        speedpanel.setLocation(100,210);
        speedpanel.setBackground(Color.BLACK);
       
        pulsepanel.setSize(800,200);
        pulsepanel.setLocation(100,420);
        pulsepanel.setBackground(Color.BLACK);
       
        frame.getContentPane().add(gearpanel);
        frame.getContentPane().add(speedpanel);
        frame.getContentPane().add(pulsepanel);
       
        frame.setVisible(true);
    }
   
    public void geargrid()
    {
        g.drawLine(100,0,900,0);
        g.drawLine(100,25,900,25);
        g.drawLine(100,50,900,50);
        g.drawLine(100,75,900,75);
        g.drawLine(100,100,900,100);
        g.drawLine(100,125,900,125);
        g.drawLine(100,150,900,150);
        g.drawLine(100,175,900,175);
        g.drawLine(100,200,900,200);
       
        int y4 = gearpanel.getWidth() / 25;
       
        for(y3 = 0; y3 <= y4; y3++)
        {
            x1 = 0;
            x2 = 0;
            y1 = 0;
            y2 = 200;
            g.drawLine(x1,y1,x2,y2);
            x1 = x1 + 25;
            x2 = x2 + 25;
            y1 = 0;
            y2 = 200;
        }
    }
   
    public static void main(String []args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Bike();
            }
        });
    }
}

//fejl//

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at Bike.createFrame(Bike.java:37)
        at Bike.<init>(Bike.java:32)
        at Bike$1.run(Bike.java:96)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)


håber der er en der kan hjælpe mig.
Avatar billede mikkelbm Nybegynder
06. maj 2007 - 18:25 #1
gearpanel
speedpanel
pulsepanel

er ikke instansieret. De skal alle tre new'es inden du arbejder med dem.
Avatar billede mikkelbm Nybegynder
06. maj 2007 - 18:27 #2
Altså noget a la:

public void createFrame()
{
    g.setColor(Color.GRAY);
 
    frame = new JFrame();
 
    frame.setTitle("Bike");
    frame.setSize(900,650);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        gearpanel = new JPanel();
    gearpanel.setSize(800,200);
    gearpanel.setLocation(100,0);
    gearpanel.setBackground(Color.BLACK);
    geargrid();
 
        speedpanel = new JPanel();
    speedpanel.setSize(800,200);
    speedpanel.setLocation(100,210);
    speedpanel.setBackground(Color.BLACK);
 
        pulsepanel = new JPanel();
    pulsepanel.setSize(800,200);
    pulsepanel.setLocation(100,420);
    pulsepanel.setBackground(Color.BLACK);
 
    frame.getContentPane().add(gearpanel);
    frame.getContentPane().add(speedpanel);
    frame.getContentPane().add(pulsepanel);
 
    frame.setVisible(true);
}
Avatar billede gigaload Nybegynder
06. maj 2007 - 18:29 #3
jeg får stadig den samme fejl
Avatar billede arne_v Ekspert
06. maj 2007 - 18:40 #4
det er vel

g.setColor(Color.GRAY);

som giver fejlen fordi g er null
Avatar billede arne_v Ekspert
06. maj 2007 - 18:41 #5
det er ikke skyld i fejlen men jeg tror at

        frame = new JFrame();
        frame.setTitle("Bike");
        frame.setSize(900,650);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

skal være

        setTitle("Bike");
        setSize(900,650);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Avatar billede mikkelbm Nybegynder
06. maj 2007 - 18:42 #6
Jah, det er det jo egentlig nok. Jeg ville bare slette den linje.

Men det andet ville også fejle, når fejlen med g er rettet :)
Avatar billede mikkelbm Nybegynder
06. maj 2007 - 18:44 #7
Og i forlængelse af Arnes antagelse, skal:

frame.getContentPane().add(gearpanel);
frame.getContentPane().add(speedpanel);
frame.getContentPane().add(pulsepanel);
     
frame.setVisible(true);

Være:

getContentPane().add(gearpanel);
getContentPane().add(speedpanel);
getContentPane().add(pulsepanel);
     
setVisible(true);

Eller hvis det er java 1.5 eller højere:

add(gearpanel);
add(speedpanel);
add(pulsepanel);
Avatar billede mikkelbm Nybegynder
06. maj 2007 - 18:48 #8
Ser lige at g også bruges længere nede.

Så det må blive noget lignende:

public void createFrame()
{
    setTitle("Bike");
    setSize(900,650);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    g = getGraphics();
    g.setColor(Color.GRAY);

    //.. resten af koden...
}
Avatar billede gigaload Nybegynder
06. maj 2007 - 22:24 #9
fejlen ligger alle de steder hvor der står g.setcolor eller g.drawline.
og det er også selvom jeg bruger g = getGraphics();
Avatar billede mikkelbm Nybegynder
06. maj 2007 - 22:51 #10
Nu kan jeg ikke lige gennemskue hvordan du vil have det til at se ud, men prøv følgende:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
/**
*
* @author Joshlo
*/
public class Bike extends javax.swing.JFrame {
 
    private JFrame frame;
    private JPanel gearpanel;
    private JPanel speedpanel;
    private JPanel pulsepanel;
    private Graphics g;
    private int x1;
    private int x2;
    private int y1;
    private int y2;
    private int y3;
 
    /** Creates a new instance of Bike */
    public Bike() {
        createFrame();
    }
 
    public void createFrame()
    {
        setTitle("Bike");
        setSize(900,650);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
        gearpanel = new JPanel();
        gearpanel.setSize(800,200);
        gearpanel.setLocation(100,0);
        gearpanel.setBackground(Color.BLACK);
     
        speedpanel = new JPanel();
        speedpanel.setSize(800,200);
        speedpanel.setLocation(100,210);
        speedpanel.setBackground(Color.BLACK);
     
        pulsepanel = new JPanel();
        pulsepanel.setSize(800,200);
        pulsepanel.setLocation(100,420);
        pulsepanel.setBackground(Color.BLACK);
     
        getContentPane().add(gearpanel);
        getContentPane().add(speedpanel);
        getContentPane().add(pulsepanel);
       
        setVisible(true);
    }
 
    public void paint (Graphics g)
    {
        super.paint(g);
       
        g.setColor(Color.GRAY);
       
        g.drawLine(100,0,900,0);
        g.drawLine(100,25,900,25);
        g.drawLine(100,50,900,50);
        g.drawLine(100,75,900,75);
        g.drawLine(100,100,900,100);
        g.drawLine(100,125,900,125);
        g.drawLine(100,150,900,150);
        g.drawLine(100,175,900,175);
        g.drawLine(100,200,900,200);
     
        int y4 = gearpanel.getWidth() / 25;
     
        for(y3 = 0; y3 <= y4; y3++)
        {
            x1 = 0;
            x2 = 0;
            y1 = 0;
            y2 = 200;
            g.drawLine(x1,y1,x2,y2);
            x1 = x1 + 25;
            x2 = x2 + 25;
            y1 = 0;
            y2 = 200;
        }
    }
 
    public static void main(String []args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Bike();
            }
        });
    }
}


Læg mærke til at jeg overrider paint-metoden!
Avatar billede gigaload Nybegynder
07. maj 2007 - 09:38 #11
den virker nu.

så hvis du gider ligge et svar mikkelbm.

du ved vel ikke tilfældigvis hvorfor min forløkke ikke blir kørt?
Avatar billede gigaload Nybegynder
07. maj 2007 - 09:57 #12
har løst min løkke. bare smid svaret
Avatar billede mikkelbm Nybegynder
07. maj 2007 - 10:36 #13
Svar...
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