Frage

Hey everyone, Ich versuche, das folgende Programm zu laufen, aber eine Nullpointer bin immer. Ich bin neu in der Java-Swing-Bibliothek, damit ich etwas sehr dumm tun könnte. So oder so hier sind meine zwei Klassen, die ich gerade um jetzt spielte und alles, was ich tun möchte, ist einen verdammten Kreis zeichnen (krank will eine gallow zeichnen, mit einem Henker auf es am Ende).

package hangman2;

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

public class Hangman2 extends JFrame{
    private GridLayout alphabetLayout = new GridLayout(2,2,5,5);
    private Gallow gallow = new Gallow();

    public Hangman2() {

        setLayout(alphabetLayout);

        setSize(1000,500);
        setVisible( true );

    }

    public static void main( String args[] ) {   
     Hangman2 application = new Hangman2();
     application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }
}


package hangman2;

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

public class Gallow extends JPanel {
    private Graphics g;

    public Gallow(){
        g.fillOval(10, 20, 40, 25);       
    }
}

Die Nullpointer kommen bei der g.fillOval Linie.

Vielen Dank im Voraus,

Tomek

War es hilfreich?

Lösung

Sie bekommen NPE weil g nicht gesetzt ist, also es ist null. Darüber hinaus sollten Sie die Zeichnung nicht im Konstruktor tun. Überlastung paintComponent(Graphics g) statt.

public class Gallow extends JPanel {
    public paintComponent(Graphics g){
        g.fillOval(10, 20, 40, 25);       
    }
}

Ich würde auch schauen in BufferedImage .

Andere Tipps

Ein paar Dinge: Vergessen Sie nicht, um das Panel zu dem JFrame hinzuzufügen. Und überschreiben die paint() Methode von JPanel für Ihre benutzerdefinierte Malerei. Sie brauchen nicht ein Graphics-Objekt zu erklären, da die Farbe Methode des JPanel einen Verweis auf einen in jedem Fall haben.

package hangman2;

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

public class Hangman2 extends JFrame{
    private GridLayout alphabetLayout = new GridLayout(2,2,5,5);
    private Gallow gallow = new Gallow();

    public Hangman2() {

        setLayout(alphabetLayout);
        add(gallow, BorderLayout.CENTER);//here
        setSize(1000,500);
        setVisible( true );

    }

    public static void main( String args[] ) {   
        Hangman2 application = new Hangman2();
        application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }
}


package hangman2;

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

public class Gallow extends JPanel {

    public Gallow(){
        super();
    }

    public void paint(Graphics g){
        g.fillOval(10, 20, 40, 25);       
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top