ragazzi sto impazzendo... ho un errore di NullPointerException nel metodo evidendiato in neretto nel codice sottostante...il metodo si chiama finish(); questo metodo e in un classe chiamata ButtonPrestazioniPanel che vi incollo qui sotto...la cosa strana e che non ho capito e perche se la classe ProgettazioneFrame lo rendo JFrame anziche Jdialog va tutto ok...non capisco perche...

codice:
public class ProgettazioneFrame extends JDialog implements ActionListener{
	public static final int DEFAULT_WIDTH = 850;
   	public static final int DEFAULT_HEIGHT = 520;
	private Logica logica;
	private JButton ok,annulla;
	private ElencoPanel centerPanel;
	private ButtonPrestazioniPanel bottoniPrestazioni;
	private ImportoCategoriaPanel icp;
	static double valoreTabellaA;
	static double valoreTabellaB;
	static double valoreTabellaB1;
	
	public ProgettazioneFrame(ButtonPrestazioniPanel bottoniPrestazioni,Logica logica, ImportoCategoriaPanel icp){
		
		setModal(true);	
		this.icp=icp;
		this.bottoniPrestazioni=bottoniPrestazioni;
		this.logica=logica;
		setTitle("Progettazione");
		setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
		
	
		
		ok=new JButton("OK");
		annulla=new JButton("Annulla");
		ok.addActionListener(this);
		annulla.addActionListener(this);
		
		bottoniPrestazioni.setVisible(false);
		
		JPanel southPanel=new JPanel();
		southPanel.setLayout(new BorderLayout());
		JPanel p1=new JPanel();
		p1.setLayout(new GridLayout(2,1));
		p1.add(new JLabel("(*)prestazione richiesta in presenza di affidamento di concessione per lavori pubblici"));
		p1.add(new JLabel("(**)prestazione richiesta in caso di appalto concorso o affidamento di concessione per lavori"));
		
		JPanel p2=new JPanel();
		p2.setLayout(new GridLayout(1,2));
		p2.add(ok);
		p2.add(annulla);
		
		southPanel.add(p1);
		southPanel.add(p2,BorderLayout.EAST);
		
		
		centerPanel=new ElencoPanel();
		
		Container c=this.getContentPane();
		c.add(centerPanel);
		c.add(southPanel,BorderLayout.SOUTH);
		
		setLocationRelativeTo(null);
		setVisible(true);
		
	}
	
	public void actionPerformed(ActionEvent e){
		if(e.getSource()==ok){
			String classeCategoria=icp.getClasseCategoria();
			double preventivo=icp.getImporto();
			Map<JCheckBox,String>mapTabB=centerPanel.getMap();
			Iterator<JCheckBox>it=mapTabB.keySet().iterator();
			LinkedList<String>lettereTabB=new LinkedList<String>();
			JCheckBox tmp=null;
			while(it.hasNext()){
				tmp=it.next();
				if(tmp.isSelected())
				{
					lettereTabB.addLast(mapTabB.get(tmp));
				}	
			}
			
			valoreTabellaA=logica.percentualeTabA(classeCategoria,preventivo);
			valoreTabellaB=logica.risTabellaB(lettereTabB,classeCategoria);
			valoreTabellaB1=logica.risTabellaB1(lettereTabB,classeCategoria);
			bottoniPrestazioni.finish();
			this.dispose();
			
			
		}
		else if(e.getSource()==annulla){
			this.dispose();
			
		}
		
	}
	public double getValueA(){
		return valoreTabellaA;
	}	
	public double getValueB(){
		return valoreTabellaB;
	}
	public double getValueB1(){
		return valoreTabellaB1;
	}
	
	
}
codice:
public class ButtonPrestazioniPanel extends JPanel implements ActionListener {

	
	private JButton progettazione, sicurezza,sicurezza2, rilieviPlanoaltimetrici, rilieviManufatti,impattiAmbietali,pianoParticellareEspropio,supportoResponsabileDelProcedimento;
	ProgettazioneFrame progettazioneframe;
	SicurezzaProgettazioneJFrame sicurezzaProgettazioneJFrame;
	ImportoCategoriaPanel icp;
	SicurezzaDirezioniLavoriJFrame sicurezzaDirezioniLavoriJFrame;
	RilieviPlanoAltimetrici rilieviPlanoAltimetrici;
	StudioDiImpattoAmbientale impattiAmbientale;
	PianiParticellareEspropio pianoParticellare;
	SupportoResponsabileDelProcedimento supportoResponsabile;
	
	ButtonChek progettazioneBc, sicurezzaBc,sicurezzaBc2, rilieviPlanoaltimetriciBc, rilieviManufattiBc,impattiAmbietaliBc,pianoParticellareEspropioBc,supportoResponsabileDelProcedimentoBc;
	

	
	public ButtonPrestazioniPanel(ImportoCategoriaPanel icp){
		
		this.icp=icp;
		GridBagLayout layout = new GridBagLayout();
	    setLayout(layout);
		
		
		progettazione=new JButton("Progettazione");
		sicurezza=new JButton("Sicurezza (D.L. 494/96) Progettazione");
		sicurezza2=new JButton("Sicurezza (D.L. 494/96) Direzione Lavori");
		rilieviPlanoaltimetrici=new JButton("Rilievi Planoaltimetrici");
		rilieviManufatti=new JButton("Rilievi Manufatti");
		impattiAmbietali=new JButton("Impatti Ambietali");
		pianoParticellareEspropio=new JButton("Piano Particellare Espropio");
		supportoResponsabileDelProcedimento=new JButton("Supporto Resp. Del Procedimento");
		
		progettazione.addActionListener(this);
		sicurezza.addActionListener(this);
		sicurezza2.addActionListener(this);
		rilieviPlanoaltimetrici.addActionListener(this);
		rilieviManufatti.addActionListener(this);
		impattiAmbietali.addActionListener(this);
		pianoParticellareEspropio.addActionListener(this);
		supportoResponsabileDelProcedimento.addActionListener(this);
		
		progettazioneBc= new ButtonChek(progettazione);
		sicurezzaBc= new ButtonChek(sicurezza);
		sicurezzaBc2= new ButtonChek(sicurezza2);
		rilieviPlanoaltimetriciBc= new ButtonChek(rilieviPlanoaltimetrici);
		rilieviManufattiBc= new ButtonChek(rilieviManufatti);
		impattiAmbietaliBc= new ButtonChek(impattiAmbietali);
		pianoParticellareEspropioBc= new ButtonChek(pianoParticellareEspropio);
		supportoResponsabileDelProcedimentoBc= new ButtonChek(supportoResponsabileDelProcedimento);
		
		
		JLabel notaBene=new JLabel("<html>N.B. per inserire o modificare i dati relativi ad una
prestazione occorre abilitare il pulsante associato
e seccessivamente cliccarci sopra");
		notaBene.setFont(new Font("Arial",Font.ITALIC,12));
	
		
	
		add(progettazioneBc, new GBC(0, 0).setWeight(10,10).setFill(GBC.HORIZONTAL).setInsets(20,10,0,50));
		add(sicurezzaBc, new GBC(0, 1).setWeight(10,10).setFill(GBC.HORIZONTAL).setInsets(0,10,0,50));
		add(sicurezzaBc2, new GBC(0, 2).setWeight(10,10).setFill(GBC.HORIZONTAL).setInsets(0,10,0,50));
		add(rilieviPlanoaltimetriciBc, new GBC(0, 3).setWeight(10,10).setFill(GBC.HORIZONTAL).setInsets(0,10,0,50));
		add(rilieviManufattiBc, new GBC(0, 4).setWeight(10,10).setFill(GBC.HORIZONTAL).setInsets(0,10,0,50));
		add(impattiAmbietaliBc, new GBC(0, 5).setWeight(10,10).setFill(GBC.HORIZONTAL).setInsets(0,10,0,50));
		add(pianoParticellareEspropioBc, new GBC(0, 6).setWeight(10,10).setFill(GBC.HORIZONTAL).setInsets(0,10,0,50));
		add(supportoResponsabileDelProcedimentoBc, new GBC(0, 7).setWeight(10,10).setFill(GBC.HORIZONTAL).setInsets(0,10,70,50));

		add(notaBene, new GBC(1, 7).setWeight(10,0).setFill(GBC.HORIZONTAL).setInsets(0,0,60,20));
	
	}
	

	public void actionPerformed(ActionEvent e){
		if(e.getSource()==progettazione){
			progettazioneframe=new ProgettazioneFrame(this,new Logica(),icp);
		}
		if(e.getSource()==sicurezza){
			sicurezzaProgettazioneJFrame=new SicurezzaProgettazioneJFrame(this,new Logica(),icp);
		}
		if(e.getSource()==sicurezza2){
			sicurezzaDirezioniLavoriJFrame=new SicurezzaDirezioniLavoriJFrame(this,new Logica(),icp);
		}
		if(e.getSource()==rilieviPlanoaltimetrici){
			rilieviPlanoAltimetrici=new RilieviPlanoAltimetrici();
		}
		if(e.getSource()==impattiAmbietali){
			impattiAmbientale=new StudioDiImpattoAmbientale(new Logica());
		}
		if(e.getSource()==pianoParticellareEspropio){
			pianoParticellare=new PianiParticellareEspropio();
		}
		if(e.getSource()==supportoResponsabileDelProcedimento){
			supportoResponsabile=new SupportoResponsabileDelProcedimento(new Logica ());
		}
	}
	

	
	public void finish(){
		double valueA=progettazioneframe.getValueA();
		double valueB=progettazioneframe.getValueB();
		double valueB1=progettazioneframe.getValueB1();
		System.out.println("value="+valueA);
		System.out.println("value="+valueB);
		System.out.println("value="+valueB1);
	}

}