Pergunta

Olá a todos, eu estou tentando executar o programa a seguir, mas estou recebendo um NullPointerException. Eu sou novo para a biblioteca Java Swing para que eu pudesse estar fazendo algo muito estúpido. De qualquer maneira, aqui estão minhas duas classes estou apenas brincando ao redor para agora e tudo que eu quero fazer é desenhar um círculo maldito (doente quer desenhar uma gallow, com uma forca sobre ele no final).

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);       
    }
}

A NullPointerException vem na linha g.fillOval.

Agradecemos antecipadamente,

Tomek

Foi útil?

Solução

Você está recebendo NPE porque g não está definido, portanto, é null. Além disso, você não deveria estar fazendo o desenho no construtor. Sobrecarga paintComponent(Graphics g) .

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

Eu também olhar em BufferedImage .

Outras dicas

Um par de coisas: não se esqueça de fazer o painel à JFrame. E substituir o método paint() de JPanel para sua pintura personalizada. Você não precisa declarar um objeto Graphics desde método paint do JPanel terá uma referência a um, em qualquer caso.

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);       
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top