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!!!