Erro ao exportar desenho do frame

Boa noite pessoas…

Montei um exemplo rápido agora onde faço um desenho no frame e tento exportá-lo em alguns formatos…
porém eu obtenho um null pointer exception…

alguem sabe porq!?

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Exportar extends JFrame implements ActionListener {
	
	private Container caixa;
	
	private JButton bExportar;
	private JButton bDesenhar;
	
	public Exportar()
	{
		getContentPane().setBackground(Color.white);
	 	caixa = getContentPane();
		caixa.setLayout(null);
		
		bExportar = new JButton("Exportar");
		bDesenhar = new JButton("Desenhar");
		
		caixa.add(bExportar);
		caixa.add(bDesenhar);
		
		bExportar.setBounds(30, 420, 100, 30);
		bDesenhar.setBounds(140, 420, 100, 30);
		
		bExportar.addActionListener(this);
		bDesenhar.addActionListener(this);
		
		setSize(500, 500);
		setVisible(true);
		
	}
	
	public static void main(String args[])
	{
		Exportar obj = new Exportar();
		obj.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource() == bExportar){
			try{
				BufferedImage bi = new BufferedImage(430, 450, BufferedImage.TYPE_INT_ARGB);
				RenderedImage rendImage = bi;
			
				ImageIO.write(rendImage, "PNG", new File("imagem.PNG"));
				ImageIO.write(rendImage, "JPEG", new File("imagem.JPG"));
				ImageIO.write(rendImage, "gif", new File("imagem.GIF"));
				ImageIO.write(rendImage, "BMP", new File("imagem.BMP"));
			}
			catch(IOException f){
				JOptionPane.showMessageDialog(null, f);
			}
			catch(Exception g){
				JOptionPane.showMessageDialog(null, g);
			}
		}
		
		if(e.getSource() == bDesenhar){
			Graphics2D g = (Graphics2D) getGraphics();
			
			Ellipse2D.Double myEllipse = new Ellipse2D.Double(100, 100, 200, 200);
			
			g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
					RenderingHints.VALUE_ANTIALIAS_ON);
			
			g.setStroke(new BasicStroke(4));
			g.setPaint(Color.white);
			g.fill(myEllipse);
			g.setPaint(Color.GRAY);
			g.draw(myEllipse);
		}
	}

}

Consegui contornar um problema…
agora consigo gerar o arquivo em .png, porém eu não tenho a visualização na tela…eu clico no botão para se desenhar porém não sai nada!
mas sei que desenhei pois ao se exportar eu tenho a visualização!

seria algo no graphics!?

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Exportar extends JFrame implements ActionListener {
	
	private Container caixa;
	
	private Graphics2D g;
	
	private BufferedImage image;
	
	private JButton bExportar;
	private JButton bDesenhar;
	
	public Exportar()
	{
		getContentPane().setBackground(Color.white);
	 	caixa = getContentPane();
		caixa.setLayout(null);
		
		bExportar = new JButton("Exportar");
		bDesenhar = new JButton("Desenhar");
		
		caixa.add(bExportar);
		caixa.add(bDesenhar);
		
		bExportar.setBounds(30, 420, 100, 30);
		bDesenhar.setBounds(140, 420, 100, 30);
		
		bExportar.addActionListener(this);
		bDesenhar.addActionListener(this);
		
		image = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB);
		
		g = (Graphics2D) image.getGraphics();
		
		setSize(500, 500);
		setVisible(true);
		
	}
	
	public static void main(String args[])
	{
		Exportar obj = new Exportar();
		obj.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource() == bExportar){
			try{
				ImageIO.write(image, "PNG", new File("mypng.PNG"));
			}
			catch(IOException f){
				JOptionPane.showMessageDialog(null, f);
			}
			catch(Exception g){
				JOptionPane.showMessageDialog(null, g);
			}
		}
		
		if(e.getSource() == bDesenhar){
			//Graphics2D g = (Graphics2D) getGraphics();
			
			Ellipse2D.Double myEllipse = new Ellipse2D.Double(100, 100, 200, 200);
			
			g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
					RenderingHints.VALUE_ANTIALIAS_ON);
			
			g.setStroke(new BasicStroke(4));
			g.setPaint(Color.white);
			g.fill(myEllipse);
			g.setPaint(Color.GRAY);
			g.draw(myEllipse);
			g.drawImage(image, 0, 0, this);
		}
	}

}