Salve ragazzi ho un piccolo problema con un'applicazione grafica, il programma dopo la pressione del pulsante deve inserire in una casella di testo un numero casuale, questo non accade e mi viene segnalato l'errore: java.lang.NullPointerException , quando nel metodo actionPerformed cerco di fare questo textField.setText(z), comunque posto il codice con la speranza che qualcuno mi aiuti.
codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.lang.*;
import java.math.*;

public class numeri4
{
	public static void main(String[] args)
	{
			ButtonFrame frame = new ButtonFrame();
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			frame.show();
	}
}

class ButtonFrame extends JFrame
{
	JPanel panel = new JPanel();
	JPanel panel2 = new JPanel();
	Container contentPane=getContentPane();
	JLabel label = new JLabel("Numeri");
	JTextField testo = new JTextField(10);
	JButton estrai = new JButton("Estrai");

	ButtonFrame(int v)
	{
		System.out.println("Secondo costruttore");
	}

	public ButtonFrame()
	{
		setTitle("Applicazione");
		setSize(400,400);
		contentPane.add(panel);
		panel.add(label);
		panel.add(testo);

		contentPane.add(panel2, BorderLayout.SOUTH);
		panel2.add(estrai);

		Azione a = new Azione(testo);
		Azione b = new Azione();
		estrai.addActionListener(b);

	}

	int calcola()
	{
		return (int) (Math.random() * 100);
	}
}



class Azione implements ActionListener
{

	ButtonFrame x = new ButtonFrame(1);
	JTextField textField;

	public Azione(JTextField aTextField)
	{
		textField = aTextField;
	}

	public Azione()
	{
		System.out.println("Costruttore Listener");
	}

	public void actionPerformed(ActionEvent event)
	{
		String command= event.getActionCommand();
		int s;
		String z;

		if(command.equals("Estrai"))
		{
			s=x.calcola();
			z=Integer.toString(s);
			textField.setText(z);
		}
	}
}