ciao a tutti,
ho scritto un programma in java con interfaccia grafica che genera stringhe casuali, e il compilatore non da errori, ma quando lo eseguo e clicco sul pulsante genera esce un'eccezione:
codice:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at StringaCasuale$Genera.actionPerformed(StringaCasuale.java:183)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
questo è il programma (so che è un po lungo da esaminare, ma per favore dateci un'occhiata...) comunque il problema dovrebbe essere nell'ascoltatore (evidenziato in rosso)
codice:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class StringaCasuale extends JFrame
{
	JLabel title=new JLabel("GENERATORE DI STRINGHE CASUALI");
	JLabel tlunghezza=new JLabel("Lunghezza della stringa");
	JLabel max=new JLabel("Massima");
	TextField gmaxlen=new TextField("32",2);
	JLabel min=new JLabel("Minima");
	TextField gminlen=new TextField("32",2);
	JLabel ecaratteri=new JLabel("Caratteri che potranno essere utilizzati nella stringa                                                            ");
	JCheckBox maiuscole=new JCheckBox("Lettere maiuscole",false);
	JCheckBox minuscole=new JCheckBox("Lettere minuscole",true);
	JCheckBox numeri=new JCheckBox("Numeri",true);
	JCheckBox speciali=new JCheckBox("Caratteri speciali  (!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|})",false);
	JCheckBox spazio=new JCheckBox("Spazio",false);
	JCheckBox personalizzato=new JCheckBox("Aggiungi alla selezione i seguenti caratteri:",false);
	TextField tpersonalizzato=new TextField(30);
	JButton genera=new JButton("Genera");
	TextField gout=new TextField(59);
	
	public StringaCasuale()
	{		
		//Dichiarazione proprietà finestra
		setTitle("Generatore di stringhe casuali (ASCII, Codifica non estesa)");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocation(100,100);
		setSize(540,350);
		setVisible(true);
		setResizable(false);
		
		//Definizione layout
		GridBagLayout layout=new GridBagLayout();
		GridBagConstraints lim=new GridBagConstraints();
		getContentPane().setLayout(layout);
		
		//Titolo
		lim.gridx=0;
		lim.gridy=0;
		layout.setConstraints(title,lim);
		add(title);
		
		//Etichetta lunghezza stringa
		lim.gridx=0;
		lim.gridy=1;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(tlunghezza,lim);
		add(tlunghezza);
		
		//Etichetta lunghezza massima
		lim.gridx=0;
		lim.gridy=2;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(max,lim);
		add(max);
		
		//Campo lunghezza massima
		lim.gridx=0;
		lim.gridy=2;
		lim.anchor=GridBagConstraints.CENTER;
		layout.setConstraints(gmaxlen,lim);
		add(gmaxlen);
		
		//Etichetta lunghezza minima
		lim.gridx=0;
		lim.gridy=3;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(min,lim);
		add(min);
		
		//Campo lunghezza minima
		lim.gridx=0;
		lim.gridy=3;
		lim.anchor=GridBagConstraints.CENTER;
		layout.setConstraints(gminlen,lim);
		add(gminlen);
		
		//Separatore 1
		Label s1=new Label("________________________________________________________________________");
		lim.gridx=0;
		lim.gridy=4;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(s1,lim);
		add(s1);
		
		//Etichetta caratteri
		lim.gridx=0;
		lim.gridy=5;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(ecaratteri,lim);
		add(ecaratteri);
		
		//Numeri
		lim.gridx=0;
		lim.gridy=6;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(numeri,lim);
		add(numeri);
		
		//Lettere minuscole
		lim.gridx=0;
		lim.gridy=7;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(minuscole,lim);
		add(minuscole);
		
		//Lettere maiuscole
		lim.gridx=0;
		lim.gridy=8;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(maiuscole,lim);
		add(maiuscole);
		
		//Caratteri speciali
		lim.gridx=0;
		lim.gridy=9;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(speciali,lim);
		add(speciali);
		
		//Spazio
		lim.gridx=0;
		lim.gridy=10;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(spazio,lim);
		add(spazio);
		
		//Personalizzato
		lim.gridx=0;
		lim.gridy=11;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(personalizzato,lim);
		add(personalizzato);
		
		//Testo personalizzato
		lim.gridx=0;
		lim.gridy=11;
		lim.anchor=GridBagConstraints.EAST;
		layout.setConstraints(tpersonalizzato,lim);
		add(tpersonalizzato);
		
		//Separatore 2
		Label s2=new Label("________________________________________________________________________");
		lim.gridx=0;
		lim.gridy=12;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(s2,lim);
		add(s2);
		
		//Pulsante Genera
		genera.addActionListener(new Genera());
		lim.gridx=0;
		lim.gridy=13;
		lim.anchor=GridBagConstraints.EAST;
		layout.setConstraints(genera,lim);
		add(genera);
		
		//Output
		gout.setEditable(false);
		lim.gridx=0;
		lim.gridy=13;
		lim.anchor=GridBagConstraints.WEST;
		layout.setConstraints(gout,lim);
		add(gout);
	}
	public class Genera implements ActionListener
	{
		public void actionPerformed(ActionEvent evt)
		{
			int max_lenght=Integer.parseInt(gmaxlen.getText());
			int min_lenght=Integer.parseInt(gminlen.getText());
			String src=null;
			if(numeri.isSelected()){src="0123456789";}
			if(minuscole.isSelected()){src=src+"abcdefghijklmnopqrstuvwxyz";}
			if(maiuscole.isSelected()){src=src+"ABCDEFGHIJKLMNOPQRSTUVWXYZ";}
			if(speciali.isSelected()){src=src+"!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}";}
			if(spazio.isSelected()){src=src+" ";}
			if(personalizzato.isSelected()){src=src+tpersonalizzato.getText();}
			char[] src_array=null;
			int iter;
			for(iter=0;iter<src.length();iter++){
				src_array[iter]=src.charAt(iter);
			}
			int out_lenght=(int)((max_lenght-min_lenght)*Math.random()+min_lenght);
			int iter2;
			int rand;
			String out=null;
			char rand_char;
			String s_rand_char;
			for(iter2=0;iter2<out_lenght;++iter2){
				rand=(int)(Math.random()*src.length());
				rand_char=src_array[rand];
				s_rand_char=Character.toString(rand_char);
				if(iter2==0){out=s_rand_char;}
				else{out=out+s_rand_char;}
			}
			gout.setText(out);
		}
	}
	public static void main(String[] args)
	{
		new StringaCasuale();
	}
}
non sono molto esperto con java e non ho idea di dove andare a cercare l'errore...
grazie a chiunque risponda ciao!!!