salve a tutti, sono nuovo di questo forum e anticipatamente ringrazio tutti per la mano che mi potreste dare a risolvere questo problema.

allora io ho questa classe:

codice:
package monopoly.client.gui;
 
import java.awt.Frame;
import java.awt.event.ActionEvent;
import javax.swing.*; 
import monopoly.tavola.Tavola;
import monopoly.tavola.casella.Societa;
import monopoly.tavola.casella.Stazione;
import monopoly.tavola.casella.Terreno;
import monopoly.util.Colori;

public class DialogContratto extends JDialog  
{ 
	public DialogContratto(Frame parent, String title, boolean modal) 
	{
	    super(parent, title, modal);
	    
	    try  
	    {
	    	//this.setSize(750, 450);
	    	setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
	    	panel.setLayout(null);
		    getContentPane().add(panel);
		    
		    contratto.setText("");
			label.setText("Inserisci numero Casella ");
			ok.setText("OK");
			pane.setText(" ");
	 
			contratto.setBounds(250, 40, 50, 20);
			label.setBounds(50, 40, 150, 20);
			ok.setBounds(350, 40, 100, 20);
			pane.setBounds(50, 100, 250, 250);
	 
			panel.add(contratto);
			panel.add(label);
			panel.add(ok);
			panel.add(pane);
			
			pane.setEditable(false);
			setVisible(true);
			
	    	if(title.equals("Stampa Terreno"))
	    		jbInitTerreno();
	    	else if(title.equals("Stampa Societa"))
	    		jbInitSocieta();
	    	else if(title.equals("Stampa Stazione"))
	    		jbInitStazione();
	    	
	    	
	    }
	    catch (Exception ex) 
	    {
	      ex.printStackTrace();
	    }
	}
	
	public DialogContratto(String title) 
	{
	    this(null, title, false);
	    
	    System.out.println("Altezza" + this);
	    panel.setLayout(null);
	    getContentPane().add(panel);
	    
	    contratto.setText("");
		label.setText("Inserisci numero Casella ");
		ok.setText("OK");
		pane.setText(" ");
 
		contratto.setBounds(250, 40, 50, 20);
		label.setBounds(50, 40, 150, 20);
		ok.setBounds(350, 40, 100, 20);
		pane.setBounds(50, 100, 250, 250);
 
		panel.add(contratto);
		panel.add(label);
		panel.add(ok);
		panel.add(pane);
		
		pane.setEditable(false);
		setVisible(true);
		
	    if(title.equals("Stampa Terreno"))
    		jbInitTerreno();
    	else if(title.equals("Stampa Stazione"))
    		jbInitStazione();
    	else if(title.equals("Stampa Societa"))
    		jbInitSocieta();
		
	   
	}
 
	private void jbInitTerreno()
	{
		int x = 350, y = 100;
		
		Colori coloreTerreno = null;
		
		for(int i = 0; i < Tavola.getInstance().getNUM_CASELLE(); i++)
		{
			if(Tavola.getInstance().getCasella(i) instanceof Terreno)
			{				
				Terreno terreno =  (Terreno) Tavola.getInstance().getCasella(i);
 
				if(coloreTerreno == null)
					coloreTerreno = terreno.getColore();
				if(coloreTerreno.equals(terreno.getColore()))
				{
					JLabel label = new JLabel(i + " - " + terreno.getNome());
					label.setBounds(x, y, 150, 20);
					panel.add(label);
					y += 20;
				}
				else
				{
					y += 20;
 
					if(y + 60 > 450)
					{
						y = 100;
						x = 550;
					}
 
					coloreTerreno = terreno.getColore();
					JLabel label = new JLabel(i + " - " + terreno.getNome());
					label.setBounds(x, y, 150, 20);
					panel.add(label);
					y += 20;
				}
			}
		}
 
		ok.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				try
				{
					int numContratto = Integer.parseInt(contratto.getText());
				
					if(numContratto >= 0 && numContratto < Tavola.getInstance().getNUM_CASELLE())
					{
						if (Tavola.getInstance().getCasella(numContratto) instanceof Terreno)
							pane.setText(((Terreno)Tavola.getInstance().getCasella(numContratto)).stampaContratto());
						else
							pane.setText("Non è una Casella Terreno");
					}
					else
					{
						pane.setText("Il numero inserito non è valido");
					}
				}
				catch(NumberFormatException ex)
				{
					JOptionPane.showMessageDialog(panel, "Devi inserire un valore intero", "Errore!", JOptionPane.ERROR_MESSAGE);
				}
			}
		});
	}

	private void jbInitStazione()
	{
		int x = 350, y = 100, j = 0;
 
		for(int i = 0; i < Tavola.getInstance().getNUM_CASELLE(); i++)
		{
			if(Tavola.getInstance().getCasella(i) instanceof Stazione)
			{
				JLabel label = new JLabel(i + " - " + Tavola.getInstance().getCasella(i).getNome());
				label.setBounds(x, y, 150, 20);
				panel.add(label);
				y += 20;
				j++;
			}
		}
 
		ok.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				try
				{
					int numContratto = Integer.parseInt(contratto.getText());
				
					if(numContratto >= 0 && numContratto < Tavola.getInstance().getNUM_CASELLE())
					{
						if (Tavola.getInstance().getCasella(numContratto) instanceof Stazione)
							pane.setText(((Stazione)Tavola.getInstance().getCasella(numContratto)).stampaContratto());
						else
							pane.setText("Non è una Casella Stazione");
					}
					else
					{
						pane.setText("Il numero inserito non è valido");
					}
				}
				catch(NumberFormatException ex)
				{
					JOptionPane.showMessageDialog(panel, "Devi inserire un valore intero", "Errore!", JOptionPane.ERROR_MESSAGE);
				}
			}
		});
	}
	
	private void jbInitSocieta()
	{		
		int x = 350, y = 100, j = 0;
 
		for(int i = 0; i < Tavola.getInstance().getNUM_CASELLE(); i++)
		{
			if(Tavola.getInstance().getCasella(i) instanceof Societa)
			{
				JLabel label = new JLabel(i + " - " + Tavola.getInstance().getCasella(i).getNome());
				label.setBounds(x, y, 150, 20);
				panel.add(label);
				y += 20;
				j++;
			}
 		}
 
		ok.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				try
				{
					int numContratto = Integer.parseInt(contratto.getText());
				
					if(numContratto >= 0 && numContratto < Tavola.getInstance().getNUM_CASELLE())
					{
						if (Tavola.getInstance().getCasella(numContratto) instanceof Societa)
							pane.setText(((Societa)Tavola.getInstance().getCasella(numContratto)).stampaContratto());
						else
							pane.setText("Non è una Casella Societa");
					}
					else
					{
						pane.setText("Il numero inserito non è valido");
					}
				}
				catch(NumberFormatException ex)
				{
					JOptionPane.showMessageDialog(panel, "Devi inserire un valore intero", "Errore!", JOptionPane.ERROR_MESSAGE);
				}
			}
		});
	}
 
	private static final long serialVersionUID = 1L;
	private JPanel panel = new JPanel();
	private static JTextField contratto = new JTextField();
	private JButton ok = new JButton();
	private JLabel label = new JLabel();
	private JEditorPane pane = new JEditorPane();
}
ogni volta che si attivano i JOptionPane.showMessageDialog e clicco la prima volta su ok si riapre di nuovo e solo allora cliccando di nuovo su ok si chiude la finestra di dialogo.
spero in un vostro aiuto e spero di essere stato chiaro