Salve, scusate se rompo sempre ma ho l'ennesimo dubbio, non riesco a capire perchè questo programma mi carica contemporaneamente 2 gui quando la chiamata alle stesse si trova dentro dei loop che in teoria dovrebbero fermare l'esecuzione del codice fuori dal ciclo finchè il ciclo non finisce.
Posto il codice per maggiore chiarezza.

codice:
	private int[] campoGiocoUmano;
	private String nickname;

	public BattagliaNavale(){

		nuovaPartita();
		setNickname(JOptionPane.showInputDialog("Inserisci il tuo nickname"));

		boolean correttezza=false;
		while (correttezza==false){
			correttezza = nuovaNave(4);
		}
                 correttezza=false;
		stampa();
		
		while (correttezza==false){
			correttezza = nuovaNave(3);
		}
		stampa();
//Altri while per le altre navi

	}

	public boolean nuovaNave(int numero){
		int[] arrayAppoggio = new int[100];
		guiInserimento gui1 = new guiInserimento(numero);
		arrayAppoggio = gui1.getCampo();
		for (int i=0; i<100;i++){
			if (campoGiocoUmano[i]!=0 && arrayAppoggio[i]!=0)
				return false;
		}
		return true;
	}
	
	public void stampa(){
		for (int i=0;i<10;i++){
			for (int j=0;j<10;j++)
				System.out.print(campoGiocoUmano[i*10 + j] + " ");
		System.out.println("");
		}
	}

	public void nuovaPartita() {
		campoGiocoUmano = new int[100];
		
		for (int i=0; i<100;i++){
			campoGiocoUmano[i]=0;
		}
	}	

	public void setNickname(String s){
		nickname = s;
	}
Come si evince dal codice, nuovaNave crea un oggetto guiInserimento che mi disegna la gui, ha dei listener sui pulsanti che captano dove viene premuto e mette dei valori in un array, array che viene prelevato grazie al metodo getCampo(). Poi vi è un piccolo controllo per vedere se si è inserita una nave in una posizione già occupata. Se già occupata torna falso e in teoria si dovrebbe ricreare la GUI e poter rinserire il posto per la nave.

Non capisco perchè quei cicli non sono fatti, il codice se eseguito si comporta cosi':
Dopo l'immissione del nickname carica sia la guiInserimento della nave da 4 che quella della nave da 3 e stampa fa anche le 2 stampa() inserite dopo i while.

Posto anche il codice della classe che crea la gui, vi dovesse servire.
codice:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.WindowConstants;
import javax.swing.border.Border;

public class guiInserimento {
	
	private URL[] urlNave; 
	private ImageIcon[] imgNave;
	private int versoNave;
	private JFrame frameInserimento;
	private int grandezzaNave;
	private int campo[];
	
	public guiInserimento(int grandezzaNave){
		inizializzaCampo();
		this.grandezzaNave = grandezzaNave;
		caricaImgNavi();
		inserimentoConGUI();
	}
	
	public void caricaImgNavi(){
		urlNave = new URL[4];
		urlNave[0] = BattagliaNavale.class.getResource("img/naveDa4.jpg");
		urlNave[1] = BattagliaNavale.class.getResource("img/naveDa3.jpg");
		urlNave[2] = BattagliaNavale.class.getResource("img/naveDa2.jpg");
		urlNave[3] = BattagliaNavale.class.getResource("img/naveDa1.jpg");
		
		imgNave = new ImageIcon[4];
		imgNave[0] = new ImageIcon(urlNave[0]);
		imgNave[1] = new ImageIcon(urlNave[1]);
		imgNave[2] = new ImageIcon(urlNave[2]);
		imgNave[3] = new ImageIcon(urlNave[3]);
	}
	
	
	public void inserimentoConGUI(){		
		Font fontBold = new Font("Baldy" , Font.BOLD, 12);
		Border bordo1 = BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black), "Orientamento", 1 ,2, fontBold, Color.RED);
	
//Bottoni laterali creazione
		JRadioButton bottoneOrizzontale = new JRadioButton("Orizzontale");
		JRadioButton bottoneVerticale = new JRadioButton("Verticale");
		JLabel display = new JLabel(iconaNave());
		JLabel naveDa = new JLabel ("       Nave da " + grandezzaNave);
		ButtonGroup gruppoEsclusivo = new ButtonGroup();
		gruppoEsclusivo.add(bottoneOrizzontale);
		gruppoEsclusivo.add(bottoneVerticale);
		
//Pannello bottoni laterali
		JPanel pannelloOrientamento = new JPanel (new GridLayout(0,1));
		pannelloOrientamento.add(naveDa);
		pannelloOrientamento.add(display);
		pannelloOrientamento.add(bottoneOrizzontale);
		pannelloOrientamento.add(bottoneVerticale);
		pannelloOrientamento.setBorder(bordo1);
//Fine bottoni laterali
		
//Pannello di gioco
		JPanel pannelloInserisciNavi = new JPanel(new GridLayout(11,11));
		Border bordoPannelloInserisciNavi = BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black), "Griglia di gioco", 1 ,2, fontBold, Color.RED);
		
		final JButton[] bottoniInserisci;
		bottoniInserisci = new JButton[100];
		
		JLabel[] labelLettere;
		labelLettere = new JLabel[11];
		
		JLabel[] labelNumeri;
		labelNumeri = new JLabel[11];
		
		labelLettere[0] = new JLabel("");
		for (int i=65;i<75;i++)
			labelLettere[i-64]=new JLabel(String.valueOf("  " + (char)i));
		
		for (int i=0;i<11;i++)
			labelNumeri[i]= new JLabel(String.valueOf(" " + i));
		
		for (int i=0;i<100;i++){
				bottoniInserisci[i]= new JButton("");
				bottoniInserisci[i].setEnabled(false);
		}
		
		
		for (int i=0;i<11;i++)
		pannelloInserisciNavi.add(labelLettere[i]);
		
		for (int i=0;i<10;i++)
			for (int j=0;j<11;j++)
				
				if (j==0)
				pannelloInserisciNavi.add(labelNumeri[i+1]);
				else if (j>0)
					pannelloInserisciNavi.add(bottoniInserisci[i*10+j-1]);
		
		
		bottoneOrizzontale.addActionListener(new ActionListener() {
			public void actionPerformed (ActionEvent e){
				for (int i=0;i<100;i++){
					bottoniInserisci[i].setEnabled(true);
				}
				versoNave = 1;
			}
		});
		
		bottoneVerticale.addActionListener(new ActionListener() {
			public void actionPerformed (ActionEvent e){
				for (int i=0;i<100;i++){
					bottoniInserisci[i].setEnabled(true);
				}
				versoNave = 2;
			}
		});
	
//Listener bottoni
		bottoniInserisci[0].addActionListener(new ActionListener() {
			public void actionPerformed (ActionEvent e){
				capta(0, versoNave);
				frameInserimento.setVisible(false);
			}
		});
		
		
		bottoniInserisci[1].addActionListener(new ActionListener() {
			public void actionPerformed (ActionEvent e){
				capta(1, versoNave);
				frameInserimento.setVisible(false);
			}
		});
		
		bottoniInserisci[2].addActionListener(new ActionListener() {
			public void actionPerformed (ActionEvent e){
				capta(2, versoNave);
				frameInserimento.setVisible(false);
			}
		});
		
		bottoniInserisci[3].addActionListener(new ActionListener() {
			public void actionPerformed (ActionEvent e){
				capta(3, versoNave);
				frameInserimento.setVisible(false);
			}
		});
		
		bottoniInserisci[4].addActionListener(new ActionListener() {
			public void actionPerformed (ActionEvent e){
				capta(4, versoNave);
				frameInserimento.setVisible(false);
			}
		});
		
		bottoniInserisci[5].addActionListener(new ActionListener() {
			public void actionPerformed (ActionEvent e){
				capta(5, versoNave);
				frameInserimento.setVisible(false);
			}
		});
		

		
// Mancano da implementare listener per i bottoni

		pannelloInserisciNavi.setBorder(bordoPannelloInserisciNavi);
		
		frameInserimento = new JFrame("Battaglia Navale");
		frameInserimento.add(pannelloOrientamento, BorderLayout.WEST);
		frameInserimento.add(pannelloInserisciNavi, BorderLayout.CENTER);
		frameInserimento.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		frameInserimento.setVisible(true);
		frameInserimento.setLocation(300,300);
		frameInserimento.pack();
		frameInserimento.setResizable(false);
	}
	
	public ImageIcon iconaNave(){
		
		ImageIcon img= new ImageIcon();
		
		if (grandezzaNave == 4)
			img = imgNave[0];
		else if (grandezzaNave == 3)
			img = imgNave[1];
		else if (grandezzaNave == 2)
			img = imgNave[2];
		else if (grandezzaNave == 1)
			img = imgNave[3];
		
		return img;
	}
	
	public void capta(int numero, int verso){

		for (int i=0;i<grandezzaNave;i++)
		{
			if (verso==1)
				campo[i+numero]=1;
			else if (verso==2)
				campo[i*10+numero]=1;
		}
	}
	
	public void inizializzaCampo() {
		campo = new int[100];
		for (int i=0; i<100;i++){
			campo[i]=0;
		}
	}
	
	public int[] getCampo(){
			return campo;
	}
	
}
Premio di genio dell'anno 2009 (in ritardo) a chi risolve