Pregunta

Hola a todos, estoy tratando de ejecutar el siguiente programa, pero obtengo una NullPointerException. Soy nuevo en la biblioteca Java Swing, así que podría estar haciendo algo muy tonto. De cualquier manera, aquí están mis dos clases con las que estoy jugando por ahora y todo lo que quiero hacer es dibujar un maldito círculo (no quiero dibujar una horca, con un ahorcado al 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);       
    }
}

La NullPointerException viene en la línea g.fillOval.

Gracias de antemano,

Tomek

¿Fue útil?

Solución

Obtiene NPE porque g no está configurado, por lo tanto, es nulo . Además, no deberías hacer el dibujo en el constructor. Sobrecarga paintComponent (Gráficos g) en su lugar.

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

También buscaría en BufferedImage .

Otros consejos

Un par de cosas: no olvide agregar el panel al JFrame . Y anule el método paint () de JPanel para su pintura personalizada. No necesita declarar un objeto Graphics ya que el método de pintura de JPanel tendrá una referencia a uno en cualquier 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top